30
Viafirma .NET Desktop Client Manual de Integración v1.2

Viafirma .NET Desktop Client · Viafirma .NET Desktop Client : Manual de Integración Página 7 de 30 referencias típicas de .Net Framework, se puede consultar el proyecto de ejemplo

  • Upload
    vulien

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Viafirma .NET Desktop Client

Manual de Integración

v1.2

ÍNDICE

ÍNDICE

1.  INTRODUCCIÓN ................................................................................ 5  

2.  REQUISITOS .................................................................................... 5  

3.  INTEGRACIÓN .................................................................................. 5  3.1.  Obtener la librería y el proyecto de ejemplo ........................................................... 6  3.2.   Introducir viafirma-client-net-desktop.dll en el proyecto java de escritorio ..................... 6  

3.2.1.   Usando Visual Studio 2010 ........................................................................ 6  3.3.   Instanciar el cliente .NET de viafirma para escritorio ................................................. 7  

3.3.1.   Definición de Proxy ................................................................................ 8  3.4.  Usar el API .................................................................................................... 9  

3.4.1.   Obtención de Certificados de usuario ........................................................... 9  3.4.2.   Uso de Firma Simple ............................................................................. 10  3.4.3.   Uso de la Firma en Bucle ........................................................................ 13  3.4.4.   Uso de la Firma en Lote en Cliente ........................................................... 14  3.4.5.   Uso de la Firma en Lote en Servidor .......................................................... 15  3.4.6.   Recuperar documentos originales de una firma en Lote ................................... 16  3.4.7.   Uso de la Multifirma ............................................................................. 17  

3.4.7.1.  MultiFirma con Objeto policy ............................................................ 18  

4.  DESCRIPCIÓN DEL API ...................................................................... 20  4.1.  Principales Métodos del API .............................................................................. 20  

4.1.1.   Lista de Certificados ............................................................................. 20  4.1.2.   Métodos de Firma ................................................................................ 20  4.1.3.   Documento Firmado ............................................................................. 20  4.1.4.   Firma en Bucle .................................................................................... 21  4.1.5.   Firma en Lote ..................................................................................... 21  4.1.6.   Documento original .............................................................................. 21  4.1.7.   Multifirma ......................................................................................... 22  

4.2.  Objeto Certificate ......................................................................................... 22  4.3.  TypeFormatSign ............................................................................................ 24  4.4.  Objeto Document .......................................................................................... 25  4.5.  Objeto signedDocument .................................................................................. 25  4.6.  Objeto genericUserViafirma ............................................................................. 26  

ÍNDICE

4.7.  Objeto Policy, PolicyUtil ................................................................................. 27  4.8.  Clase PolicyParams ........................................................................................ 27  4.9.  Manejo de Errores ......................................................................................... 28  

CONTROL DE DOCUMENTO

CONTROL DE DOCUMENTO

Título: Viafirma .NET Desktop Client

Asunto: Manual de Integración

Versión: v1.2 Fecha: 14-06-2013

Código: Revisión anterior: 14-12-2012

Idioma: Núm. Páginas: 30

CONTROL DE CAMBIOS Y VERSIONES

Fecha Versión Motivo del Cambio

14-12-12 v.1.0 Primera versión

14-06-13 v.1.2

Revisión de nuevas funcionalidades incorporadas en la v1.2 del cliente .NET Desktop. Los cambios fueron:

• Punto 2 Requisitos

• Punto 3.3.1 Definición de Proxy

• Punto 3.4 Documentación del API en formato HTML

• Punto 3.4.7.1 Multifirma con Policy

• Punto 4 Uso del API

• Puntos 4.4 al 4.9

Página 5 de 30 Viafirma .NET Desktop Client : Manual de Integración

1. INTRODUCCIÓN

Desde la versión 3.5.3 de viafirma platform existe la posibilidad de hacer uso del API de

la plataforma desde aplicaciones .NET de escritorio, para este propósito existe un cliente

específico llamado ViafirmaClientNETDesktop, que aporta las herramientas necesarias

para realizar firmas de todos los formatos compatibles con viafirma platform.

La intención de este manual es proporcionar el conocimiento adecuado sobre cómo hacer

uso del cliente .NET de escritorio para viafirma platform desde una tercera aplicación.

2. REQUISITOS

Para la utilización de este cliente serán necesarios los requisitos que se describen en la siguiente tabla:

Requisitos

Sistema Operativo Windows XP, Vista o Seven

Viafirma Platform v3.5.5 y superior

Aplicación .NET de escritorio que necesite consumir el servicio de firma

3. INTEGRACIÓN

En los próximos puntos se explican los pasos necesarios para, desde cero, implementar la firma electrónica en cualquier proyecto .NET de escritorio, en resumen los pasos a dar serán:

1. Obtener las DLLs y el proyecto de ejemplo

2. Introducir la librería en el proyecto

3. Instanciar el cliente

4. Usar el API

Página 6 de 30 Viafirma .NET Desktop Client : Manual de Integración

3.1. Obtener la librería y el proyecto de ejemplo

El primer paso necesario para la integración de la firma electrónica con viafirma en una aplicación .NET de escritorio será obtener la librería necesaria que da acceso al API específico (llamada viafirma-client-net-desktop.dll) y el proyecto de ejemplo de ese API, estos recursos los podrás obtener de dos modos distintos:

1. Descargando el kit de desarrollo .Net para escritorio desde la pagina de desarrolladores de viafirma: http://developers.viafirma.com

2. Solicitar credenciales para la configuración del cliente (API KEY).

3.2. Introducir viafirma-client-net-desktop.dll en el proyecto java de escritorio

A continuación se describe cómo importar la librería en el IDE de desarrollo visual studio.

3.2.1. Usando Visual Studio 2010

Para poder utilizar viafirma en cualquier aplicación .Net de escritorio que necesite hacer uso de capacidades de firma, no hay más que obtener la librería viafirma-client-net-desktop.dll, en la forma indicada en el punto anterior (a través del portal de developers de viafirma), y añadirla al proyecto de Visual Studio 10 como se haría con cualquier otra ‘Referencia’.

Para agregar una Referencia hay que seguir los siguientes pasos, extraídos de la documentación web de Microsoft - http://msdn.microsoft.com/es-es/library/7314433t(v=vs.90).aspx

1. En el Explorador de soluciones, seleccione el proyecto.

2. En el menú Proyecto, haga clic en Agregar referencia.

3. Se abrirá el cuadro de diálogo Agregar referencia.

4. Seleccione la ficha que indique el tipo de componente al que desee hacer referencia.

5. En el panel superior, seleccione el componente al que desea hacer referencia y, a continuación, haga clic en el botón Aceptar. Presione CTRL haciendo clic para seleccionar varios componentes.

Nota: También será necesaria incluir la librería BouncyCastle.Crypto.dll la cual se podrá encontrar en el directorio /lib del proyecto de ejemplo. Además serán necesarias otras

Página 7 de 30 Viafirma .NET Desktop Client : Manual de Integración

referencias típicas de .Net Framework, se puede consultar el proyecto de ejemplo para comprobarlas.

3.3. Instanciar el cliente .NET de viafirma para escritorio

Una vez que tengas la librería viafirma-client-net-desktop.dll disponible en tu proyecto podrás comenzar a usar el API y lo primero que deberás hacer es instanciar el objeto que te permitirá usar el API de firma. Para ello no hay más que implementar el siguiente código (todo el código incluido en este manual ha sido extraído de la aplicación de ejemplo del cliente .Net de Viafirma para escritorio distribuido gratuitamente por viafirma):

//*******************************************//  /*     INICIALIZACIÓN  CLIENTE          */      //*******************************************//        //Iniciamos  el  ViafirmaClientDesktop  ViafirmaClientNetDesktop.ViafirmaClientDesktop  client;  try  {  

//Se  inicia  con  la  URL  de  VIAFIRMA  y  el  api_key/api_pass  ViafirmaClientDesktop.Init("http://testservices.viafirma.com/viafirma",  

"xnoccio",  "12345");          

//Obtenemos  la  instancia  del  cliente  client  =  ViafirmaClientDesktop.GetInstance();  

}  catch  (InternalException  e)  {  System.Console.WriteLine("Error  iniciando  cliente:  "  +  e.MessageError  +  "  

"  +  e.ToString());  }  

Básicamente debes realizar una llamada a ViafirmaClientDesktop.Init(…) pasando los siguientes parámetros:

1. String URLViafirma: en este parámetro es necesario pasar la dirección URL donde se encuentra el servidor viafirma platform.

2. String apiKey: nombre de las credenciales proporcionadas por el equipo de Viafirma.

3. String passKey: pass de las credenciales proporcionadas por el equipo de viafirma.

Y una vez inicializado, simplemente hay que llamar al ViafirmaClientDesktop.GetInstance() para obtener la instancia de ViafirmaClientDesktop que contiene los métodos necesarios para realizar firmas electrónicas.

Página 8 de 30 Viafirma .NET Desktop Client : Manual de Integración

3.3.1. Definición de Proxy

Desde la versión 1.2 del SDK se habilita la posibilidad de inicializar el cliente indicándole la configuración del WebProxy a utilizar, la inicialización con proxy sin autenticación se haría del siguiente modo:

     //Inicialización  con  Proxy  SIN  autenticación  ViafirmaClientDesktop.Init("http://testservices.viafirma.com/viafirma",  "<apiKey>",  "<apiPass>",  "http://<proxyHost>:<proxyPort>/",  null,  null);  

   

Configuración proxy con autenticación:    

     //Inicialización  con  Proxy  CON  autenticación  ViafirmaClientDesktop.Init("http://testservices.viafirma.com/viafirma",        "<apiKey>",  "<apiPass>",  "http://<proxyHost>:<proxyPort>/",  "<proxyUser>",  "<proxyPass>");  

 También es posible inicializar el cliente sin indicar proxy y configurar el proxy en la aplicación cliente, esta configuración se haría del siguiente modo:

     //Otro  modo  de  definir  un  proxy        System.Net.ServicePointManager.Expect100Continue  =  false;        WebProxy  proxy  =  new  WebProxy();        proxy.Address  =  new  System.Uri(@"<proxyHost>:<proxyPort>/");        proxy.UseDefaultCredentials  =  false;        proxy.Credentials  =  new  NetworkCredential("<proxyUser>",  "<proxyPass>");        WebRequest.DefaultWebProxy  =  proxy;      

De la configuración anterior cabe destacar la primera línea de código:

System.Net.ServicePointManager.Expect100Continue  =  false;  

Esa línea puede no ser necesaria para todos los entornos, en algunos casos se ha comprobado que con esta propiedad a true el servidor proxy no respondía a las peticiones que se realizaban desde el cliente .Net.

 

 

Página 9 de 30 Viafirma .NET Desktop Client : Manual de Integración

3.4. Usar el API

Para explicar el uso del API se utilizará el código del proyecto ejemplo. Además se podrá ver la explicación de cada método.

3.4.1. Obtención de Certificados de usuario

En este punto se explica el código necesario para recuperar los Certificados disponibles para el usuario que se encuentren instalados en el Sistema.

Suponiendo que ya has inicializado el cliente y que, por tanto, disponemos de una instancia de la clase ViafirmaClientDesktop (en adelante el cliente de viafirma o, simplemente, el cliente) podrás comenzar a utilizar el API de viafirma. En el siguiente ejemplo de código se hace uso de este API para obtener los certificados de usuario disponibles en el sistema:

//Obtenemos  la  lista  de  certificados  disponibles  List<Certificate>  certificates  =  client.GetClientCertificates();   Como se observa, únicamente es necesario llamar al método del cliente GetClientCertifficates() sin ningún parámetro, el propio cliente se encargará de acceder al almacén de certificados de usuario para recuperar todos los certificados disponibles y retornarlos como una lista de objetos ViafirmaClientNetDesktop.DesktopVO.Certificate.

La clase ViafirmaClientNetDesktop.DesktopVO.Certificate da acceso a una amplia información sobre el certificado, esta información podría servir además de para mostrar información al usuario sobre su certificado, para poder filtrarlos según los requerimientos que deseemos y tengamos disponibles. Un método de ejemplo de filtrado de certificados es el siguiente, el que se filtran según la Autoridad de certificación que lo expide:

Página 10 de 30 Viafirma .NET Desktop Client : Manual de Integración

public  static  List<Certificate>  filterCerts(List<Certificate>  certificates){    

//Controlo  que  no  esté  vacía     if(certificates==null){            System.Console.WriteLine("No  se  ha  encontrado  ningún  certificado  instalado");            return  null;     }       List<Certificate>  certsFNMT  =  new  List<Certificate>();     //Filtro  el  cetificado  (por  ejemplo  para  quedarme  solo  los  de  FNMT)     foreach  (Certificate  cert  in  certificates){       //Etiqueta  para  usar  con  certificados       System.Console.WriteLine(cert.Label);                 if  (cert.CA.Contains("FNMT"))  

{         certsFNMT.Add(cert);       }  

}          return  certsFNMT;  }  

Este método recibe la lista de Certificate anteriormente recuperada.

Una vez obtenidos los certificados disponibles y filtrados, debería ser la aplicación la encargada de mostrarlos al usuario para que seleccione el que corresponda.

3.4.2. Uso de Firma Simple

En este punto se presupone que ya se ha inicializado el cliente y se ha seleccionado un certificado para realizar la firma. Una vez que se alcance este punto se puede proceder a ejecutar los métodos necesarios que realizarán el firmado. Para lo cual será necesario crear los objetos FileVO y Policy que definirán el modo en que debe realizarse el proceso de firma. Ejemplo de creación del FileVO y el Policy:

//Creamos  FileVO  FileVO  documento  =  new  FileVO();  documento.name  =  "test"  +  extension;  documento.typeFile  =  typeFile;  documento.typeFormatSign  =  typeFormatSign;  documento.bytes  =  datosAFirmar;    //Creamos  Policy  Policy  policy  =  new  Policy();                policy.typeFormatSign  =  typeFormatSign;  policy.typeSign  =  TypeSign.ENVELOPED;  

Página 11 de 30 Viafirma .NET Desktop Client : Manual de Integración

Los campos necesarios que debemos rellenar para obtener el FileVO válido son:

1. name: nombre del documento resultante.

2. typeFile: formato del fichero a firmar. Existe el enumerado TypeFile que incluye el listado de formatos de fichero disponibles.

3. typeFormatSign: formato de firma que se desea realizar. Existe el enumerado TypeFormatSign que incluye el listado de formatos de firma disponibles.

4. bytes: Byte array de los datos a firmar.

Y lo necesario para definir un Policy básico será:

1. Crear el objeto usando el constructor por defecto.

2. Asignarle el formato de firma (typeFormatSign) que se desee usando el método set correspondiente.

3. Y, por último, asignar el tipo de firma que se desea realizar mediante el enumerado TypeSign. Actualmente es recomendable usar el tipo Enveloped, para otros tipos es recomendable consultar su disponibilidad con el equipo de viafirma.

El objeto Policy permite definir otros parámetros útiles haciendo uso de OptionalRequest y/o PolicyParams, para estas operaciones recomendamos contactar con el soporte de viafirma para que puedan orientarle en su uso para el caso específico que se necesite.

Una vez definidos FileVO y Policy se puede llamar al método de firma que nos devolverá el idFirma en la plataforma.

String  idFirma  =  null;  try  {          //Pasamos  el  certificado  elegido,  la  politica  de  firma  y  el  documento     idFirma  =  client.SignWithPolicy(cert,  policy,  documento);  }  catch  (InternalException  e)  {  

System.Console.WriteLine("Internal  Server  Exception"  +  e.MessageError  +  "  "  +  e.ToString());  }catch  (ViafirmaClientException  e)  {  

System.Console.WriteLine("Client  Side  Exception:  "  +  e.ToString());  }    El método SignWithPolicy para realizar una firma simple recibe los siguientes parámetros:

1. Certificate: certificado con el que firmar.

2. Policy: política de firma de viafirma para especificar la configuración de firmado.

3. FileVO: especifica el documento a firmar y algo de metainformación propia y de la firma.

Este método podrá lanzar dos tipos de excepciones:

1. InternalException: Indica que se ha producido un error en el lado del servidor, además contiene información básica sobre el error producido.

Página 12 de 30 Viafirma .NET Desktop Client : Manual de Integración

2. ViafirmaClientException: Indica que la excepción se ha producido en el lado Cliente.

Si la firma ha funcionado correctamente devuelve el IdFirma por el que se reconoce esa operación en el servidor, ese IdFirma es el que se utiliza para obtener el documento firmado mediante el método GetSignedDocument(string idFirma). Ejemplo:

byte[]  signedDocumentBytes;  try  {          signedDocumentBytes  =  client.GetSignedDocument(idFirma).data;  }  catch  (InternalException  e)  {  

System.Console.WriteLine("Error  al  obtener  el  documento:"  +  e.ToString());  }        El método devuelve un objeto SignedDocument que, además del documento firmado (data), contiene información útil sobre la firma realizada. Este método sirve para recuperar información dado cualquier idFirma de cualquier tipo de firma, solo en el caso de la firma en bucle debe tratarse con más cuidado ya que el método de firmado devuelve más de un idFirma en el mismo string, esto se explica en el siguiente punto.

Página 13 de 30 Viafirma .NET Desktop Client : Manual de Integración

3.4.3. Uso de la Firma en Bucle

La firma en bucle consiste en realizar una serie de firmas independientes en una sola operación, dando como resultado los ficheros firmados por separado. Básicamente, este modo de firma, permite realizar tareas de firma masiva con una única intervención del usuario. A continuación un ejemplo del uso de la firma en Bucle en el que se supone que disponemos de cliente correctamente inicializado y de certificado de suario seleccionado:

//Creamos  Ficheros  List<FileVO>  documents  =  new  List<FileVO>();  FileVO  f1  =  new  FileVO();  f1.name  ="test.pdf";  f1.bytes  =datosPdf;  f1.typeFile=TypeFile.PDF;  documents.Add(f1);    FileVO  f2  =  new  FileVO();  f2.name  =  "test2.xml";  f2.bytes  =  datosXml;  f2.typeFile  =  TypeFile.XML;  documents.Add(f2);    //Definimos  Policy  Policy  policy  =  new  Policy();  policy.typeFormatSign  =TypeFormatSign.XADES_EPES_ENVELOPED;  policy.typeSign  =  TypeSign.ENVELOPED;    //Firmamos  (el  idFirma  de  una  firma  en  bucle  devuelve  un  string  con  varios  ids  separados  por  ;)  String  resultId;  try  {          resultId  =  client.SignWithPolicy(cert,  policy,  documents);      }  catch  (InternalException  e1)  {  

System.Console.WriteLine("Error  en  SERVIDOR  realizando  la  firma  en  BUCLE.  Message:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }  catch  (ViafirmaClientException  e1)  {  

System.Console.WriteLine("Error  en  CLIENTE  realizando  la  firma  en  BUCLE:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }    //Separamos  los  distintos  ids  de  firma  recuperados  String[]  individualsIds  =  resultId.Split(";".ToCharArray());    //Recorremos  los  ids  foreach  (String  id  in  individualsIds)  {  

try  {       //Recuperamos  cada  documento                    signedDocument  signedDocument  =  client.GetSignedDocument(id);  

//Procesamos  el  documento  firmado    …  Código  de  procesado  del  documento:  custodia,  envío  a  WS...  

       }  catch  (InternalException  e)  {            System.Console.WriteLine("Error  al  obtener  el  documento:  "  +  e.MessageError  +  "  "  +  e.ToString());     }    }    

Página 14 de 30 Viafirma .NET Desktop Client : Manual de Integración

El método SignWithPolicy para realizar una firma en bucle recibe los siguientes parámetros:

1. Certificate: certificado con el que firmar.

2. Policy: política de firma de viafirma para especificar la configuración de firmado.

3. List<FileVO>: especifica los documentos a firmar.

Este método devuelve un string que contiene varios idFirma separados el carácter de punto y coma (;). Si se desease recuperar los documentos firmados se deberá llamar al método GetSignedDocument(idFirma) una vez por cada id de firma recuperado, por ejemplo, para tres documentos, tres llamadas.

3.4.4. Uso de la Firma en Lote en Cliente

La firma en Lote permite firmar varios documentos con una sola operación, para ello se genera un ‘lote’ con todos los documentos enviados y se realiza una única firma de ese ‘lote’. Con este método se genera una sola firma para un número elevado de documentos. En este ejemplo la firma se realiza en el lado cliente usando el certificado que seleccionase el usuario.

//Creamos  Ficheros  List<FileVO>  documents  =  new  List<FileVO>();  FileVO  f1  =  new  FileVO();  f1.name  =  "test.pdf";  f1.bytes=datosPdf;  f1.typeFile=TypeFile.PDF;  documents.Add(f1);    FileVO  f2  =  new  FileVO();  f2.name  =  "test2.xml";  f2.bytes  =  datosXml;  f2.typeFile  =  TypeFile.XML;  documents.Add(f2);                              //Definimos  Policy  Policy  policy  =  new  Policy();  policy.typeFormatSign  =  TypeFormatSign.XADES_EPES_ENVELOPED;  policy.typeSign  =  TypeSign.ENVELOPED;    //Firmamos  String  id;  try  {          id  =  client.SignBatchWithPolicy(cert,  policy,  documents);  }  catch  (InternalException  e1)  {              System.Console.WriteLine("Error  en  SERVIDOR  realizando  la  firma  en  LOTE  en  CLIENTE:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }  catch  (ViafirmaClientException  e1)  {  

System.Console.WriteLine("Error  en  CLIENTE  realizando  la  firma  en  LOTE  en  CLIENTE:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }    //Recuperamos  el  documento  try  {                  signedDocument  signedDoc  =  client.GetSignedDocument(id);  

 

Página 15 de 30 Viafirma .NET Desktop Client : Manual de Integración

//Procesamos  el  documento  firmado    …  Código  de  procesado  del  documento:  custodia,  envío  a  WS...  

 }  catch  (InternalException  e)  {            System.Console.WriteLine("Error  al  obtener  el  documento:  "  +  e.Message);  }  

El método SignBatchWithPolicy para realizar una firma en lote en el lado cliente recibe los siguientes parámetros:

1. Certificate: certificado con el que firmar.

2. Policy: política de firma de viafirma para especificar la configuración de firmado.

3. List<FileVO>: especifica los documentos a firmar.

Este método devuelve un string que contiene el idFirma. Si se desease recuperar el documento firmado resultante se deberá llamar al método GetSignedDocument(idFirma).

3.4.5. Uso de la Firma en Lote en Servidor

Igual que la anterior, pero realizando la firma en el servidor con un certificado previamente instalado en él.  

//Creamos  Ficheros  List<FileVO>  documents  =  new  List<FileVO>();  FileVO  f1  =  new  FileVO();  f1.name  =  "test.pdf";  f1.bytes  =  datosPdf;  f1.typeFile  =  TypeFile.PDF;  documents.Add(f1);    FileVO  f2  =  new  FileVO();  f2.name  =  "test2.xml";  f2.bytes  =  datosXml;  f2.typeFile  =  TypeFile.XML;  documents.Add(f2);    //Definimos  Policy  Policy  policy  =  new  Policy();  policy.typeFormatSign=TypeFormatSign.XADES_EPES_ENVELOPED;  policy.typeSign=TypeSign.ENVELOPED;                                //Reutilizamos  Policy  y  documents  de  la  firma  anterior  para  hacer  lo  mismo  pero  en  servidor  String  idServer;  try  {          idServer  =  client.SignBatchByServerWithPolicy(policy,  documents,"xnoccio","12345");  }  catch  (InternalException  e1)  {  

System.Console.WriteLine("Error  en  SERVIDOR  realizando  la  firma  en  LOTE  en  SERVIDOR:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }  catch  (ViafirmaClientException  e1)  {  

Página 16 de 30 Viafirma .NET Desktop Client : Manual de Integración

System.Console.WriteLine("Error  en  CLIENTE  realizando  la  firma  en  LOTE  en  SERVIDOR:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }    //Recuperamos  el  documento  try  {                  signedDocument  signedDoc  =  client.GetSignedDocument(idServer);  

//Procesamos  el  documento  firmado    …  Código  de  procesado  del  documento:  custodia,  envío  a  WS...  

             }  catch  (InternalException  e)  {  

System.Console.WriteLine("Error  al  obtener  el  documento:  "  +  e.MessageError  +  "  "  +  e.ToString());  

     }    

El método SignBatchByServerWithPolicy para realizar una firma en lote en el lado servidor recibe los siguientes parámetros:

1. Policy: política de firma de viafirma para especificar la configuración de firmado.

2. List<FileVO>: especifica los documentos a firmar.

3. String Alias: Alias con el que se ha instalado el certificado en el servidor.

4. String Password: Password con el que se ha instalado el certificado en el servidor.

Este método devuelve un string que contiene el idFirma. Si se desease recuperar el documento firmado resultante se deberá llamar al método GetSignedDocument(idFirma).

3.4.6. Recuperar documentos originales de una firma en Lote

Una vez realizada una firma el Lote puede ser necesario volver a recuperar alguno de los documentos originales que componían el Lote. Para ello será necesario, en primer lugar, pedir a viafirma los identificadores por los que conoce a esos documentos originales (utilizando para ello el identificador de firma obtenido al firmar el Lote), para después recuperar el que nos interese:

try  {  List<String>  originalDocumentsIds=  client.GetOriginalDocumentsIds(signId);  

             foreach  (String  idOriginal  in  originalDocumentsIds)  {       Document  originalDocument  =  client.GetOriginalDocument(idOriginal);  

}        }  catch  (InternalException  e1)  {     …        }    

Nota: El orden en el que devuelve los identificadores es aquel en el que se incluyeron en el lote.

Nota 2: El objeto Document se explica en puntos siguientes de este manual.

Página 17 de 30 Viafirma .NET Desktop Client : Manual de Integración

3.4.7. Uso de la Multifirma

La multifirma consiste en obtener un documento con múltiples firmantes.

Para este caso de uso viafirma permite realizar el proceso de un modo natural. Para agregar un nuevo firmante a un documento ya firmado, únicamente necesitamos enviar el documento firmado a ese nuevo firmante y que lo firme, será viafirma quien se encargue de introducir la nueva firma en el modo adecuado, independientemente de si estamos trabajando con un XAdES o PAdES o firmas binarias.

El único aspecto que habrá que tener en cuenta es que se mantenga el mismo formato para todas las firmas.

//Creamos  Fichero  FileVO  document  =  new  FileVO();  document.name  =  "test.pdf";  document.bytes  =  datosXml;  document.typeFile  =  TypeFile.XML;      //Definimos  Policy  Policy  policy  =  new  Policy();  policy.typeFormatSign=TypeFormatSign.XADES_EPES_ENVELOPED;  policy.typeSign=TypeSign.ENVELOPED;    //Realizamos  un  firma  simple  normal  String  id;  try  {          id  =  client.SignWithPolicy(cert,  policy,  document);  }  catch  (InternalException  e1)  {  

System.Console.WriteLine("Error  en  SERVIDOR  realizando  la  primera  firma  multifirma:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }  catch  (ViafirmaClientException  e1)  {  

System.Console.WriteLine("Error  en  CLIENTE  realizando  la  primera  firma  multifirma:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  }        //MULTIFIRMA:  Suponemos  que  otro  usuario  con  otro  certificado  quiere  realizar  una  segunda  firma  en  el  documento,  para  lo  cual  realizamos  otra  firma  simple  normal  sobre  el  documento  ya  firmado  previamente  //1.-­‐  Obtenenmos  el  fichero  previamente  firmado  signedDocument  signedDoc;  try  {  

signedDoc  =  client.GetSignedDocument(id);  }  catch  (InternalException  e2)  {  

System.Console.WriteLine("Error  obteniendo  el  fichero  con  la  primera  firma:  "  +  e2.MessageError);  }  //2.-­‐  Creamos  Policy  como  siempre  y  FileVO  con  el  fichero  recuperado    //Creamos  Fichero  Policy  policy2  =  new  Policy();  policy2.typeFormatSign=TypeFormatSign.XADES_EPES_ENVELOPED;  policy2.typeSign=TypeSign.ENVELOPED;  FileVO  document2  =  new  FileVO();  document2.name  =  "test.xml";  

Página 18 de 30 Viafirma .NET Desktop Client : Manual de Integración

document2.bytes  =  signedDoc.data;  document2.typeFile  =  TypeFile.XML;  //3.-­‐Realizamos  la  firma  normalmente  (en  este  caso  lo  normal  sería  utilizar  un  certificado  diferente,  pero  en  este  ejemplo  se  reutiliza  el  mismo)  String  id2;  try  {          id2  =  client.SignWithPolicy(cert,  policy2,  document2);  }  catch  (InternalException  e1)  {  

System.Console.WriteLine("Error  en  SERVIDOR  realizando  la  segunda  firma:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  

}  catch  (ViafirmaClientException  e1)  {  System.Console.WriteLine("Error  en  CLIENTE  realizando  la  segunda  firma:  "  +  e1.MessageError  +  "  "  +  e1.ToString());  

     }        //Recuperamos  y  procesamos  el  documento  multifirmado            signedDocument  signedDocument2;  try  {          signedDocument2  =  client.GetSignedDocument(id2);  

//Procesamos  el  documento  firmado    …  Código  de  procesado  del  documento:  custodia,  envío  a  WS...  

}  catch  (InternalException  e2)  {  System.Console.WriteLine("Error  obteniendo  el  fichero  con  las  dos  firmas:  

"  +  e2.MessageError);  }  

3.4.7.1. MultiFirma con Objeto policy

A partir del cliente v1.2 se incorpora la posibilidad de realizar una multifirma a partir del uso de Políticas de firma, a través del objeto Policy y sus respectivos parámetros. Esta mejora es compatible con versiones de viafirma platform v3.5.5 y superior. A continuación se muestra un ejemplo del uso de la multifirma haciendo uso del Policy;

     //Creamos  Fichero        FileVO  document  =  new  FileVO();        document.name  =  "test.pdf";        document.bytes  =  datosPdf;        document.typeFile  =  TypeFile.PDF;          //Definimos  Policy        Policy  policy  =  PolicyUtil.newPolicy(TypeFormatSign.XADES_EPES_ENVELOPED,  TypeSign.ENVELOPED);          String  idMultifirma;            try  {  

//Iniciamos  la  multifirma  y  obtenemos  el  id  del  proceso  de  multifirma     idMultifirma  =  client.InitMultisign(policy,  document);        }  catch  (InternalException  e1)  {       throw  e1;        }                          

String  idFirma;        //El  documento  puede  ser  vacio,  no  se  utilizará  ya  que  se  establece  en  el  método  initMultisign        document  =  new  FileVO();              //PRIMERA  FIRMA  

Página 19 de 30 Viafirma .NET Desktop Client : Manual de Integración

     try  {  //Policy  con  datos  básicos  indicando  el  idMultifirma  en  el  Policy  //Se  podría  reutilizar  el  anterior  

             Policy  pol  =  PolicyUtil.newPolicy(TypeFormatSign.XADES_EPES_ENVELOPED,  TypeSign.ENVELOPED);                //indicamos  el  id  de  multifirma                PolicyUtil.AddParameter(pol,  PolicyParam.MULTISIGN_ID,  idMultifirma);                  //el  id  que  devuelve  será  el  mismo  que  en  firmas  sucesivas  que  usen  el  mismo  idMultifirma                idFirma  =  client.SignWithPolicy(cert,  pol,  new  FileVO());                //recupero  el  documento  con  una  firma                signedDocument  signedDocument  =  client.GetSignedDocument(idFirma);        }  catch  (Exception  e)  {                throw  e;        }            //SEGUNDA  FIRMA        try  {  

//Policy  con  datos  básicos  indicando  el  idMultifirma  en  el  Policy                Policy  pol  =  PolicyUtil.newPolicy(TypeFormatSign.XADES_EPES_ENVELOPED,  TypeSign.ENVELOPED);                //indicamos  el  id  de  multifirma                PolicyUtil.AddParameter(pol,  PolicyParam.MULTISIGN_ID,  idMultifirma);             //No  necesitaría  recuperar  el  idFirma  porque  es  el  mismo  que  antes     client.SignWithPolicy(cert,  pol,  new  FileVO());     //Notese  que  se  recupera  el  documento  con  el  mismo  idFirma  que  antes  pero  esta  vez  tendrá  dos  firmas     signedDocument  signedDocument  =  client.GetSignedDocument(idFirma);        }  catch  (Exception  e)  {                throw  e;        }              //TERCERA  FIRMA        try  {  

//Policy  con  datos  básicos  indicando  el  idMultifirma  en  el  Policy                Policy  pol  =  PolicyUtil.newPolicy(TypeFormatSign.XADES_EPES_ENVELOPED,  TypeSign.ENVELOPED);                //indicamos  el  id  de  multifirma                PolicyUtil.AddParameter(pol,  PolicyParam.MULTISIGN_ID,  idMultifirma);          

//No  necesitaría  recuperar  el  idFirma  porque  es  el  mismo  que  antes     client.SignWithPolicy(cert,  pol,  new  FileVO());     //Notese  que  se  recupera  el  documento  con  el  mismo  idFirma  que  antes  pero  esta  vez  tendrá  tres  firmas     signedDocument  signedDocument  =  client.GetSignedDocument(idFirma);        }  catch  (Exception  e)  {                throw  e;        }    

Página 20 de 30 Viafirma .NET Desktop Client : Manual de Integración

4. DESCRIPCIÓN DEL API

A partir de la v1.2 se incluye en la SDK la documentación detallada del API en formato html.

4.1. Principales Métodos del API

4.1.1. Lista de Certificados

• public List<Certificate> GetClientCertificates()

Este método devuelve el listado de certificados disponibles en el sistema operativo (Windows) incluyendo las tarjetas criptográficas que Windows sea capaz de reconocer.

4.1.2. Métodos de Firma

• public String SignWithPolicy(Certificate certificate, Policy policy, FileVO document)

Este es el método principal de firma, recibe un Certificate que contiene el certificado con el que firmar, un FileVO que representa al documento a firmar, un Policy que describe el método de firma. Devuelve el identificador de firma en la Plataforma.

Puede lanzar dos excepciones: InternalException si se produce en el lado del servidor o ViafirmaClientDesktop si se produce en el lado cliente.

• public String SignByServerWithPolicy(Policy policy, FileVO document, String alias, String password)

Similar al anterior, pero realiza la firma en el servidor. También recibe Policy y FileVO pero no el Certificate, en su lugar ha de pasarse el alias y password del certificado instalado en servidor. Lanza las mismas excepciones que el método anterior.

4.1.3. Documento Firmado

• public SignedDocument GetSignedDocument(String signId)

Haciendo uso del IdFirma obtenido en alguno de los métodos de firma anteriores, es posible recuperar información de la operación, así como en el documento firmado. Esa información está contenida en el objeto SignedDocument que es devuelto por este método. Puede lanzar la excepción InternalException que indica error o en el lado servidor o en la comunicación WS.

Página 21 de 30 Viafirma .NET Desktop Client : Manual de Integración

4.1.4. Firma en Bucle

• public String SignWithPolicy(Certificate certificate, Policy policy, List<FileVO> documents)

Es similar al método de firma simple, pero recibe un listado de FileVO en lugar de uno solo. Este método devuelve un String con los ID’s de firma de los documentos firmados separados por ‘;’. Por ejemplo, si mandásemos un listado de tres FileVO, el método devolvería algo como lo siguiente (obsérvese que correspondería a tres ID’s separados por punto y coma):

xxxx-xxxx-xxxx-xxxx-xxxx;xxxx-xxxx-xxxx-xxxx-xxxx;xxxx-xxxx-xxxx-xxxx-xxxx

4.1.5. Firma en Lote

• public String SignBatchWithPolicy(Certificate certificate, Policy policy, List<FileVO> documents)

Realiza la firma de un lote de documentos que se generará con la lista de FileVO pasada, también recibe el Policy de firma y el certificado con el que firmar. Devuelve el ID de firma correspondiente

• public String SignBatchByServerWithPolicy(Policy policy, List<FileVO> documents, String alias, String password)

Igual que la anterior, pero realizando la firma en el servidor, para ello debemos tener previamente instalado el certificado en el servidor. El método recibe el Policy, la lista de FileVO y el alias/pass del certificado del servidor. Devuelve el ID correspondiente.

4.1.6. Documento original

• public Document GetOriginalDocument(String signId)

Recupera el documento original correspondiente al identificador pasado. Devuelve un objeto Document.

• public List<String> GetOriginalDocumentsIds(String batchSignId)

Pasándole un identificador de firma en Lote, devuelve un listado con todos los identificadores de los documentos originales que componen dicho Lote. El orden de los identificadores devueltos es aquel con el que se introdujeron los documentos en el lote.

Página 22 de 30 Viafirma .NET Desktop Client : Manual de Integración

4.1.7. Multifirma

• public String InitMultisign(Policy policy, FileVO document)

Inicia una operación de multifirma (múltiples firmantes de un documento) y devuelve un identificador del proceso de multifirma (no identificará nunca al fichero firmado).

Una vez se tiene el identificador de multifirma, se debe invocar al método de firma correspondiente (sign...Policy(Policy policy, FileVO document, ...)) pasándole el id de multifirma como un parámetro del objeto Policy con nombre ‘MULTISIGN_ID’.

(Se puede ver un ejemplo en los ejemplo de us del API de este mismo manual)

4.2. Objeto Certificate

Contiene toda la información sobre un X509 con la que el sistema puede trabajar. Es una abstracción de un certificado X509. En él encontraremos los siguientes campos útiles disponibles:

• Dictionary<string, string>  Properties

Conjunto de propiedades Oids que contiene el certificado. Aquí se encontrarán todos los oids que no han podido ser importados a campos atributos

• string Country

País de emisión del certificado

• string TypeCertificate

Tipo de certificado

• string CA

Autoridad de registro que emitió el certificado

• string Name

Nombre del usuario

• string Email

Página 23 de 30 Viafirma .NET Desktop Client : Manual de Integración

Email del usuario (si el certificado lo contiene

• string NumberUserId

Numero identificativo del certificado. En España será el DNI.

• string Surname

Primer apellido indicado en el certificado

• string Lastname

Segundo apellido si existe, si no será null

• string Title

Determina el tipo de cargo. Utilizado para los certificados de Persona con vinculo institucional.

• string Organization

Organización a la que pertenece. Utilizado para los certificados empresariales

• string Cn

Campo CN del certificado.

• string LegalType

Tipo jurídico del certificado

• X509Certificate X509

Devuelve el certificado X509.

• string Alias

Indica el alias del certificado.

• bool SignatureEnabled

Página 24 de 30 Viafirma .NET Desktop Client : Manual de Integración

Indica si el certificado puede ser usado para firmar según el KeyUsage.

• bool AuthenticationEnabled

Indica si el certificado puede ser usado para autenticar según el KeyUsage.

• string Label

Representación del certificado en una línea de texto.

• bool Expired

Comprueba si el certificado está expirado.

4.3. TypeFormatSign

A la hora de configurar las propiedades de firma dentro del objeto Policy o el FileVO, tenemos que indicar qué formato de firma vamos a utilizar.

Para ello se dispone de un enumerado con todos los formatos permitidos por viafirma platform, sin embargo, no todos ellos estarán soportados en este cliente para java desktop (windows system).

En concreto, los formatos que se podrán utilizar son los siguientes:

• //XAdES

o TypeFormatSign.XADES_EPES_ENVELOPED

o TypeFormatSign.XADES_T_ENVELOPED

o TypeFormatSign.XADES_XL_ENVELOPED //Requiere certificado con OCSP informado

o TypeFormatSign.XADES_A_ENVELOPED //Requiere certificado con OCSP informado

• //PAdES

o TypeFormatSign.PDF_PKCS7

o TypeFormatSign.PDF_PKCS7_T

o TypeFormatSign.PAdES_BASIC

o TypeFormatSign.PAdES_BES

o TypeFormatSign.PAdES_EPES

Página 25 de 30 Viafirma .NET Desktop Client : Manual de Integración

o TypeFormatSign.PAdES_LTV

4.4. Objeto Document

El objeto Document representa un Documento original para viafirma, es devuelto por el API al invocar al método GetOriginalDocumentsIds(signId).  

• String Id

Identificador del documento en viafirma

• TypeFile Type

Tipo indicado para el fichero (XML, PDF, TXT, Binary, etc.)

• byte[] Data

El documento en formato binario

• String Name

Nombre dado al documento.

4.5. Objeto signedDocument

Este objeto representa un documento firmado por viafirma recuperado usando el método GetSignedDocument(String  signId).  Además incluye información sobre el firmante.

• genericUserViafirma asociatedUser

Información sobre el firmante

• byte[] data

Documento en formato binario

• string id

Identificador del documento en viafirma

• string name

Página 26 de 30 Viafirma .NET Desktop Client : Manual de Integración

Nombre dado al documento

• object temp

Campo de uso interno

• TypeFile type

Tipo del documento (XML, PDF, TXT, Binary, etc.)

• TypeFormaSign typeFormaSign

Formato en el que se ha realizado la firma

4.6. Objeto genericUserViafirma

Contiene información relativa al certificado del firmante, se obtiene a partir del objeto signedDocument.

• string caName

Nombre de la autoridad de certificación que emitió el certificado

• string email

Email del firmante

• string firstName

Nombre del firmante

• string lastName

Apellido del firmante

• string numbreUserId

Identificador del firmante (puede una id personal como el número de DNI o un email si no hubiera ningún otro identificador en el certificado)

• genericUserViafirmaEntry[] properties

Página 27 de 30 Viafirma .NET Desktop Client : Manual de Integración

Todas las propiedades que se han podido extraer del certificado

• string typeCertificate

Tipo del certificado reconocido por viafirma

• string typeLegal

Tipo legal del certificado definido por viafirma

4.7. Objeto Policy, PolicyUtil

A partir del cliente v1.2, se incorpora el soporte para Políticas de Firma a través del objeto Policy y PolicyUtil.

Usando la clase PolicyUtil podemos instanciarnos cómodamente objetos Policy con sus propiedades básicas y, después, poder añadirle parámetros fácilmente.

Ejemplo:

//Instanciamos  Policy  con  datos  básicos  usando  PolicyUtil                Policy  pol  =  PolicyUtil.newPolicy(TypeFormatSign.XADES_EPES_ENVELOPED,  TypeSign.ENVELOPED);                //Agregamos  un  parámetro  (MULTISIGN_ID)  al  policy  usando  PolicyUtil                PolicyUtil.AddParameter(pol,  PolicyParam.MULTISIGN_ID,  idMultifirma);  

4.8. Clase PolicyParams

La clase PolicyParams contiene los nombres para distintos parámetros permitidos para definir la política de firma. En esta versión solo contiene un parámetro:

     ///  <summary>  Id  del  proceso  de  multifirma.  </summary>            ///  <value>  values:  id  de  multifirma  válido</value>        ///  <remarks>type:  String</remarks>        ///  <remarks>since:  3.5.5</remarks>                  public  static  String  MULTISIGN_ID  =  "MULTISIGN_ID";  

Página 28 de 30 Viafirma .NET Desktop Client : Manual de Integración

4.9. Manejo de Errores

A partir del cliente v1.2 se mejora el manejo de errores recuperados desde viafirma platform:

InternalException:

• CodeError codigoError - puede ser null

• int code

• String message

Donde las posibles claves son las siguientes: ///    CONNECTION_PROBLEM=100,  ///    ERROR_AUTHENTICATION_UNAVALIBLE=4000,  ///    ERROR_PROTOCOL_SIGN  =  5000,  ///Error  interno  en  el  servidor,  por  favor  inténtelo  mas  tarde.  ERROR_INTERNO=1,  ///No  se  ha  podido  recuperar  correctamente  el  certificado.  ERROR_MANEJO_CERTIFICADO=2,  ///La  aplicación  indicada  no  existe,  utilice  un  código  de  aplicación  valido.  ERROR_APLICACION_NO_ENCONTRADA=3,  ///La  entidad  indicada  no  existe,  utilice  un  identificador  valido.  ERROR_IDENTIFICADOR_NO_ENCONTRADO=4,  ///No  se  ha  podido  crear  la  entidad.  ERROR_CREATE=5,  ///No  se  ha  podido  recuperar  el  certificado  desde  el  XMLSign  ERROR_XMLSIGN_SIN_CERTIFICADO=6,  ///  El  certificado  no  es  valido  ERROR_XMLSIGN_CERTIFICADO_NO_VALIDO=7,  ///  El  parámetro  requerido  no  es  válido.  ERROR_PARAM=8,  ///  El  formato  de  firma  no  es  reconocido  o  contiene  errores.  ERROR_XMLSIGN_FORMAT=9,  ///  Identificador  no  válido.  ERROR_INVALID_ID=10,  ///  Operación  no  implementada.  ERROR_NOT_IMPLEMENTED=11,  ///  Faltan  parámetros  de  configuración  en  contexto  ERROR_BADCONFIGURATION=20,  ///  El  certificado  no  ha  sido  enviado  por  el  usuario.  WARNING_CERTIFICADO_NO_ENVIADO=50,  ///  Autoridad  de  certificación    no  reconocida  por  el  sistema.  ERROR_VALIDACION_AUTORIDAD_NO_RECONOCIDA=101,  ///  Autoridad  de  certificación    no  reconocida  por  el  sistema.  ERROR_VALIDACION_AUTORIDAD_NO_RECONOCIDA_SOPORTE_FNMT=111,  ///  Autoridad  de  certificación    no  configurada  en  el  sistema.  ERROR_VALIDACION_AUTORIDAD_NO_CONFIGURADA=112,  ///  La  configuración  del  validador  no  es  correcta,  probablemente  no  existan  certificados  de  confianza  configurados.  ERROR_VALIDACION_CONFIGURACION_PARAMETRO=102,  ///  No  se  han  podido  recuperar  las  lista  de  revocacin  de  certificados  =CRLs).  ERROR_VALIDACION_CRL=103,  ///  Certificado  caducado.  

Página 29 de 30 Viafirma .NET Desktop Client : Manual de Integración

ERROR_VALIDACION_CERTIFICADO_CADUCADO=104,  ///  Certificado  caducado  o  no  válido.  ERROR_CERTIFICADO_NO_VALIDO=105,  ///  No  se  ha  podido  recuperar  el  certificado.  ERROR_CERTIFICADO_NO_FOUND=106,  ///  El  certificado  indicado  está  revocado  ERROR_VALIDACION_CERTIFICADO_REVOCADO=107,  ///  No  se  conoce  el  estado  del  certificado  ERROR_VALIDACION_CERTIFICADO_UNKNOWN=108,  ///  No  se  han  podido  validar  el  certificado,  la  plataforma  interna  de  validación  no  está  disponible.  ERROR_VALIDACION_PLUGIN_ERROR=109,  ///  El  servicio  de  validación  de  certificados  OCSP  no  está  disponible  en  este  momento.  ERROR_OCSP_NO_DISPONIBLE=130,  ///  La  ruta  para  la  validación  OCSP  no  es  correcta.  ERROR_OCSP_URL=131,  ///  No  se  puede  validar  el  certificado,  hay  problemas  de  conexión  con  el  servidor  de  validación  OCSP.  ERROR_OCSP_IO=132,  ///  No  se  puede  validar  el  certificado,  el  servicios  de  validación  OCSP  parece  no  estar  disponible  en  este  momento.  ERROR_OCSP_INTERNAL_ERROR=133,  ///  El  validador  de  certificados  OCSP  no  esta  disponible  en  estos  momentos,  inténtelo  mas  tarde.  ERROR_OCSP_TRY_LATER=134,  ///  La  validación  OCSP  del  certificado  no  ha  sido  autorizada.  ERROR_OCSP_NO_AUTORIZADO=135,  ///  No  se  ha  podido  realizar  la  validación  del  certificado.  Se  requiere  que  el  titular  del  certificado  autorice  su  validación.  ERROR_OCSP_NO_AUTORIZADO_REQUIERE_AUTIRIZACION_USUARIO=136,  ///  El  sistema  de  custodia  no  está  disponible  en  este  momento.  El  proceso  de  firma  no  se  puede  completar  ERROR_CUSTODIA=9000,  ///  El  fichero  enviado  tiene  un  tamaño  demasiado  grande.  ERROR_FILE_SIZE=9001,  ///  No  se  ha  indicado  ningún  fichero  para  su  firma,  o  el  fichero  esta  vacio.  ERROR_FILE_EMPTY=9002,  ///  El  código  de  chequeo  de  este  identificador  no  es  válido,  compruebe  que  el  código  es  correcto.  ERROR_CUSTODIA_CHECK_DIGIT=9003,  ///  No  se  ha  podido  verificar  el  documento  custodiado.  ERROR_CUSTODIA_NO_VALID=9004,  ///  El  formato  de  firma  no  es  reconocido.  ERROR_TYPE_FORMAT_SIGN=9005,  ///  No  se  ha  podido  localizar  el  documento  en  la  cache  temporal.  ERROR_CACHE_DOCUMENT=9006,  ///  No  se  ha  podido  realizar  la  comprobación  del  documento.  ERROR_VALIDANDO_FIRMA=8000,  ///  El  documento  indicado  no  es  un  documento  XML.  ERROR_NOT_XML_DOCUMENT=8001,  ///  El  documento  indicado  parece  estar  dañado.  ERROR_NOT_HEALTHY_DOCUMENT=8002,  ///  Incorrect  orginal  documnent  format.  ERROR_NOT_CORRECT_FORMAT_DOCUMENT=8003,  ///  El  fichero  original  es  desconocido  para  esta  firma.  Por  favor  utilice  el  método,  checkSignedDetachedDocumentValidity=signedDocument,  originalDocument)  ERROR_DETACHED_VALIDATION=8004,    ///  Se  esperaba  otro  formato  de  firma  ERROR_FORMAT_SIGN_UNEXPECTED=8005,    ///  Error  al  procesar  el  PDF.  

Página 30 de 30 Viafirma .NET Desktop Client : Manual de Integración

ERROR_PDF=1001,  ///  Error  al  enviar  el  email.  ERROR_SEND_MAIL=1100,  ///  No  se  puede  actualizar  el  keystore.  ERROR_KEYSTORE_UPDATE_FILE=1200,  ///  No  se  ha  encontrado  ninguna  TSA  Configurada.  ERROR_TSA_NOT_CONFIGURED=6000,  ///  No  se  ha  podido  conectar  con  ninguna  de  las  TSA  configuradas  ERROR_TSA_CONNECT_PROBLEM=6001,  ///  Se  ha  producido  un  error  al  analizar  los  parámetros  de  la  petición.  ERROR_PARSING_PARAMETER=3001,  ///  Aplicación  no  registrada,  contacte  con  su  proveedor  de  servicios  de  firma  y  autenticación.  ERROR_APLICACION_NO_REGISTRADA=4009,