Este ejemplo tiene como objetivo verificar la firma del documento que se ha realizado en el ejemplo de Generación de una firma CMS/PKCS#7.

Para poder probar este ejemplo se debe descargar el archivo sampleAxis6.zip y seguir las instrucciones que se encuentran en Configuración del entorno.

El archivo descargado ya contiene una firma a verificar, pero si se desea se puede cambiar este archivo por el generado en el ejemplo Generación de una firma CMS/PKCS#7 para comprobar la validez de la firma generada.

Para realizar una petición de verificación de una firma, se debe usar un objeto de tipo VerifyRequest que contendrá la petición al host destino, tal y como se ha visto en el ejemplo de Validación de un certificado x.509. Y dado que se trata de una firma CMS el perfil es CMS/PKCS#7.

VerifyRequest vr = new VerifyRequest();
vr.setProfile(new URI(PROF_VERIF_CMS));

Dado que la firma a verificar es detached, en la petición se deben incluir los datos del archivo firmado y de la firma.
Por un lado se introducen los datos de la firma, en un objeto de tipo SignatureObject y en este caso codificados en binario. Además de los datos también se indica que el formato de la firma introducida es CMS.

SignatureObject sobj = new SignatureObject();
Base64Signature b64sig = new Base64Signature();
b64sig.setType(new URI(TYPE_CMS));
b64sig.set_value(Util.readBinaryFile(path_in + signname));
sobj.setBase64Signature(b64sig);
vr.setSignatureObject(sobj);

Los datos del archivo firmado se introducen en la petición como InputDocuments, también codificados en Base64 dentro de un objeto de tipo Document.

InputDocuments idoc = new InputDocuments();
Document doc = new Document();
Base64Data b64data = new Base64Data();
b64data.set_value(Util.readBinaryFile(path_in + filename));
doc.setBase64Data(b64data);
idoc.setDocument(doc);
vr.setInputDocuments(idoc);

Una vez se han introducido todos los datos en la petición se invoca la operación verify() que envía la petición al host y recoge la respuesta en un objeto VerifyResponse.

VerifyResponse vrs = bindingDsv.verify(vr);

Si se ejecuta el ejemplo se obtendrá una respuesta como la siguiente.

** RESPONSE **
---------------------
Major: urn:oasis:names:tc:dss:1.0:resultmajor:Success
Minor: urn:oasis:names:tc:dss:1.0:resultminor:ValidSignature_OnAllDocuments
DN: CN=Dave, OU=Demo, O=TrustedX, C=ES
Issuer Trust Level: 0
Issuer Trust Label: Administration