SDK viafirma platform

Verificación de firma

Otra de las operaciones que podemos llevar a cabo es la verificación de firmas. Esta validación devuelve información sobre el documento firmado a verificar y sobre los certificados implicados en la firma.

La información que devuelve la verificación va desde; si es una firma es válido o no, si los certificados de firma están soportados por viafirma platform, hasta comparar la firma con el documento original.

Los requisitos previos a la validación son disponer del identificador de firma, en el caso de que la firma se haya realizado en viafirma platform, o el documento firmado y original, en el caso de que el documento haya sido firmado en otra plataforma, o firmado en viafirma platform pero se opta por validarlo por el documento firmado en vez de por el identificador de firma.

En el caso de validar la firma de un documento pasándole como parámetro solo el documento firmado, es decir, sin especificar el documento original, viafirma platform es capaz de extraer el original mediante el firmado. Por tanto el documento original no es obligatorio para este tipo de validación.

Además de los requisitos comentados anteriormente, también se necesita conocer previamente los siguiente aspectos:

  • El estándar de la firma (SIGNATURE_STANDARD): PADES, XADES o CADES.
  • El Hash del ocumento original en el caso de que no dispongamos del documento original de la firma.

A continuación mostramos ejemplos de uso de este método:

Java

Ejemplo pasando el identificador de firma para validar una firma PAdES:

//Recuperamos la instancia del cliente
ViafirmaClient viafirmaClient = ViafirmaClientFactory.getInstance();

// Instaciamos la clase encargada de añadir los parámetros de la petición
VerificationSignatureRequest verificationSignatureRequest = new VerificationSignatureRequest();

// Vamos añadiendo los parámetros al listado

// SignatureStandard
String signatureStandardKey = VerificationSignatureRequest.ParameterKey.SIGNATURE_STANDARD.name();
String signatureStandardValue = VerificationSignatureRequest.SignatureStandard.PADES.name();
// Añadimos el parámetro SignatureStandard
verificationSignatureRequest.addParameter(signatureStandardKey, signatureStandardValue);

// Sign ID
String signIdKey = VerificationSignatureRequest.ParameterKey.SIGNATURE_ID.name();
String signIdValue = "YGOF-2OTF-Y5M1-5180-0820-0761";
// Añadimos el parámetro TypeSign
verificationSignatureRequest.addParameter(signIdKey, signIdValue);

//Obtengo un listado de objetos SignatureVerification con la validación de las distintas firmas que pudiese tener el documento firmado
List<SignatureVerification> signatureVerificationList = viafirmaClient.verifySignature(verificationSignatureRequest);

Ejemplo pasando el documento firmado y original para validar una firma XAdES:

//Recuperamos la instancia del cliente
ViafirmaClient viafirmaClient = ViafirmaClientFactory.getInstance();

// Cargo el documento original
byte[] docOrigin = IOUtils.toByteArray(getClass().getResourceAsStream("/example.xml"));
// Cargo el documento firmado
byte[] docSigned = IOUtils.toByteArray(getClass().getResourceAsStream("/signedExample.xml"));

// Instanciamos la clase encargada de añadir los parámetros de la petición
VerificationSignatureRequest verificationSignatureRequest = new VerificationSignatureRequest();

// Vamos añadiendo los parámetros al listado

// SignatureStandard
String signatureStandardKey = VerificationSignatureRequest.ParameterKey.SIGNATURE_STANDARD.name();
String signatureStandardValue = VerificationSignatureRequest.SignatureStandard.XADES.name();
// Añadimos el parámetro SignatureStandard
verificationSignatureRequest.addParameter(signatureStandardKey, signatureStandardValue);

// Añado el documento orginal y el firmado
verificationSignatureRequest.setOriginalDocument(docOrigin);
verificationSignatureRequest.setSignedDocument(docSigned);

//Obtengo un listado de objetos SignatureVerification con la validación de las distintas firmas que pudiese tener el documento firmado
List<SignatureVerification> signatureVerificationList = viafirmaClient.verifySignature(verificationSignatureRequest);

.Net

Ejemplo pasando el identificador de firma para validar una firma PAdES:

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

// Instanciamos la clase encargada de añadir los parámetros de la petición
// Instanciamos la clase encargada de añadir los parámetros
verificationSignatureRequest verificationSignatureRequest = VerifyUtil.newVerify();

// Vamos añadiendo los parámetros al listado

// SignatureStandard
String signatureStandardKey = VerifyParams.SIGNATURE_STANDARD_KEY;
String signatureStandardValue = VerifyParams.PADES_SIGNATURE_STANDARD;
// Añadimos el parámetro SignatureStandard
VerifyUtil.AddParameter(verificationSignatureRequest, signatureStandardKey, signatureStandardValue);

// Sign ID
String signIdKey = VerifyParams.SIGNATURE_ID_KEY;
String signIdValue = "YGOF-2OTF-Y5M1-5180-0820-0761";
// Añadimos el parámetro TypeSign
VerifyUtil.AddParameter(verificationSignatureRequest, signIdKey, signIdValue);


//Obtengo un array de objetos signatureVerification con la validación de las distintas firmas que pudiese tener el documento firmado
signatureVerification[] signatureVerification = viafirmaClient.verifySignature(verificationSignatureRequest);

Ejemplo pasando el documento firmado y original para validar una firma XAdES:

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

// Cargo el documento original
Assembly assembly = Assembly.GetExecutingAssembly();
Stream fs = assembly.GetManifestResourceStream("example.xml");
byte[] docOrigin = new byte[fs.Length];
fs.Read(docOrigin, 0, datos_a_firmar.Length);

// Cargo el documento firmado
Stream fs = assembly.GetManifestResourceStream("signedExample.xml");
byte[] docSigned = new byte[fs.Length];
fs.Read(docSigned, 0, datos_a_firmar.Length);


// Instanciamos la clase encargada de añadir los parámetros de la petición
verificationSignatureRequest verificationSignatureRequest = VerifyUtil.newVerify();

// Vamos añadiendo los parámetros al listado

// SignatureStandard
String signatureStandardKey = VerifyParams.SIGNATURE_STANDARD_KEY;
String signatureStandardValue = VerifyParams.XADES_SIGNATURE_STANDARD;
// Añadimos el parámetro SignatureStandard
VerifyUtil.AddParameter(verificationSignatureRequest, signatureStandardKey, signatureStandardValue);

// Añado el documento orginal y el firmado
verificationSignatureRequest.originalDocument = docOrigin;
verificationSignatureRequest.signedDocument = docSigned;

//Obtengo un array de objetos signatureVerification con la validación de las distintas firmas que pudiese tener el documento firmado
signatureVerification[] signatureVerification = viafirmaClient.verifySignature(verificationSignatureRequest);

El resultante de la respuesta es un listado de tipo SignatureVerification que contiene la información de verificación de las distintas firmas que pudiese tener el documento firmado.

Puede encontrar ejemplos de la implementación de este método y de parte de la información que obtiene desde las siguientes urls:

Java

.Net