Este ejemplo tiene como objetivo firmar un documento de texto mediante el servicio de firma de TrustedX. Para la comprensión de este ejemplo, se recomienda haber entendido previamente el ejemplo de validación de un certificado X.509.

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

A diferencia del ejemplo de validación de certificados, para realizar una firma se debe crear una petición de firma mediante un objeto SmartSignRequest. Como en el ejemplo anterior se deben definir las constantes y incluir una cabecera de autenticación en la petición.

SmartSignRequest ssr = new SmartSignRequest(host);

Se debe definir el perfil de la firma a realizar, en este caso CMS/PKCS#7.

ssr.setProfile(Constants.Profile.CMSPKCS7);

En este ejemplo se pretende realizar la firma de los datos contenidos en el archivo HelloWorld.txt, así se incluyen los datos codificados en Base64. Además indicaremos con que certificado se debe realizar la firma, seleccionándolo a partir del nombre distinguido del usuario. También se indica el formato de la firma que será CMS y dado que no se indica nada más la firma será de tipo detached.

ssr.setInputBase64Data(Util.readBinaryFileB64(path_in + filename));
ssr.setKeySubjectName(distinguishedName);
ssr.setSignatureType(Constants.SignatureType.CMS);

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

SmartSignResponse ssrs = ssr.send();

Una vez envidada la petición se puede comprobar si ésta se ha procesado correctamente consultando los parámetros de la respuesta. Para ello se usan las funciones de la clase auxiliar UtilTrustedX. Si todo va bien se recupera la firma de la respuesta y se almacena en un fichero, en el ejemplo de validación de firma CMS/PKCS#7 se verá como se debe comprobar la validez de la firma realizada. Para recuperar la firma, para el perfil CMS/PKCS#7 debe utilizarse el método getSignatureBase64().

if (UtilTrustedX.checkSW(ssrs.getResultMajor(), ssrs.getResultMinor(), ssrs.getResultMessage())) {
   String destFilename = path_out + filename.substring(0, filename.lastIndexOf("."))
         + "SignedSW.txt.p7s";
   Util.writeBinaryFileB64(destFilename, ssrs.getSignatureBase64());
}

Después de ejecutar el ejemplo se obtiene una respuesta como la siguiente y un archivo con la firma.

File saved successfully on: data/output/HelloWorldSignedSW.txt.p7s