import java.io.*;
import java.security.*;

/** Program to calculate SHA / MD5 digest of a message
 * 
 * Author: Shweta Agrawal
 * Date: 28th Aug, 2003
 */
 
class Digest
{
	
	public static void main (String args[])
	{
		String msgfile = "";
		String algo = "";
		long startTime, endTime;
		
		/** Get the message file name*/
		if (args.length != 2) {
			System.out.println("Usage: Digest <message file> <algorithm (SHA1/MD5)>");
			System.exit(0);
		} else {
			msgfile = args[0];
			algo = args[1];
			if (!algo.equals("SHA1") && !algo.equals("MD5") && !algo.equals("SHA"))
				{
				System.out.println("Invalid algorithm");
				System.exit(0);
				}
		}
		
		try {
		
			/** Initialize the message digest object */
			MessageDigest m = MessageDigest.getInstance(algo);
		
			/** Read the message from the file and update*/
			
			FileInputStream fis = new FileInputStream(msgfile);
			BufferedInputStream bis = new BufferedInputStream(fis);
			byte buffer[] = new byte[1024];
			int length;
		
			startTime = System.currentTimeMillis();
			while (bis.available() != 0) {
				length = bis.read(buffer);
				m.update(buffer, 0, length);
			}
			bis.close();
			
			/** Generate the message digest */
			byte[] dig = m.digest();
			endTime = System.currentTimeMillis();
			
			System.out.println("Time for " + algo + " = " + (endTime - startTime));
			String msgdigest = msgfile + "." + algo;
			FileOutputStream digestFos = new FileOutputStream(msgdigest);
			digestFos.write(dig);
			digestFos.close();
			/*System.out.println("The Message digest in file: " + msgdigest);*/
			
		} catch (Exception e) {
		
			System.out.println("Execption: " + e);
			e.printStackTrace();
			
		}
	}
}
