## Verificar la Firma

Ya hemos añadido código al programa VerSig para

- Introducir los bytes codificados de la clave y convertirlos en un PublicKey llamado pubKey

- Introducir los bytes de la firma en un array de bytes llamado sigToVerify

Ahora podemos proceder a hacer la verificación.

Inicializar el Objeto Signature para Verificación

> Al igual que en la generación firmas, una firma se verifica usando un ejemplar de la clase Signature. Necesitamos crear un objeto Signature que use el mismo algoritmo de firma que se utilizó para generar la firma. El algoritmo usado por el programa GenSig fue SHA1withDSA del proporcionador de SUN.

>     Signature sig = Signature.getInstance("SHA1withDSA", "SUN");

> Luego, necesitamos inicializar el objeto Signature. El método de inicialización para vrificación requiere la clave pública:

>     sig.initVerify(pubKey);

Suministrar al Objeto Signature los Datos a Verificar

> Ahora necesitamos suministrar al objeto Signature los datos para los que se generó la firma. Esto datos están en el fichero cuyo nombre se especificó como el tercer argumento de la línea de comandos. Al igual que hicimos durante la firma, leemos los datos en un buffer, y los suministramos al objeto Signature mediante una llamada al método update:

>     FileInputStream datafis = new FileInputStream(args[2]);
>     BufferedInputStream bufin = new BufferedInputStream(datafis);

>     byte[] buffer = new byte[1024];
>     int len;
>     while (bufin.available() != 0) {
>         len = bufin.read(buffer);
>         sig.update(buffer, 0, len);
>     };

>     bufin.close();

Verificar la Firma

> Una vez que le hemos suministrado todos los datos al objeto Signature, podemos veriricar la firma digital de los datos y reportar el resultado. Recordamos que la firma fue leida en un array de bytes llamados sigToVerify.

>     boolean verifies = sig.verify(sigToVerify);

>     System.out.println("signature verifies: " + verifies);

> El valor verifies será true si la firma (sigToVerify) es la firma real de los datos del fichero específicado por la clave privada correspondiente a la clave pública pubKey.

Ozito