/**
  * Verifica del digest (impronta digitale) di un messaggio
  @author Enrico Denti
  @version 1.0, 26/2/1999
*/

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Esempio1 {

  public static void main(String args[]){
	System.out.println("Verifica del digest (impronta"
			+ " digitale) di un messaggio");

	byte[] improntaAutentica = new byte[20];

	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));


	System.out.println("Inserire l'impronta da verificare (un numero per riga):");
	// nella realt sar letta da un file, o cablata nel codice,
	// o scaricata via rete
	try {
		for(int i=0; i<20; i++) {
			String buf = in.readLine();
			improntaAutentica[i] = Byte.parseByte(buf);
		}
	}
	catch (IOException e) {
	  System.out.println("Lettura da input fallita");
	}

	System.out.println("Impronta introdotta:");
	for (int i=0; i<impronta.length; i++)
		System.out.print("" + improntaAutentica[i] + "\t");
	System.out.println("");

	// ------- questa parte  identica a Esempio0----------
	// ------- perch ricalcola il digest ex novo ---------

	MessageDigest sha = null;
	try {
	  sha = MessageDigest.getInstance("SHA-1");
	  // SHA = Secure Hash Algorithm, standard del NIST
	}
	catch (NoSuchAlgorithmException e) {
	  System.out.println("Algoritmo richiesto non supportato");
	}

	byte[] messaggioInChiaro = {10,20,30,40,50};
	// nella realt sar letto da un file

	sha.update(messaggioInChiaro);
	byte[] impronta = sha.digest();

	// ------- fine parte identica a Esempio0----------

	// verifica

	if (MessageDigest.isEqual(improntaAutentica,impronta))
		System.out.println("VERIFICA OK");
	else
		System.out.println("VERIFICA NEGATIVA!!");
  }
}
