
import java.io.*;
import java.security.*;
import java.util.*;
import java.sql.*;


public class SHA1DigestCal
{

  public static long getCurrentTime()
  {
    java.util.Date date=Calendar.getInstance().getTime();
    Timestamp a=new Timestamp(date.getTime());
    long currentTime=Calendar.getInstance().getTimeInMillis();
    return currentTime;
  }

  public static void main(String args[])
  {
    if(args.length!=2){
      System.out.println("Usage: SHA1DigestCal <name_of_file_to_digest> <message_size>");
      System.exit(0);
    }

    try{

      long begin,end;

      System.out.println("MessageSize\tDigestTime");

      System.out.println("----------------------------");

      int msgsize = Integer.valueOf(args[1]).intValue();
           
      begin = getCurrentTime();

      /************* Create a Message Digest object **************/

      MessageDigest md = MessageDigest.getInstance("SHA");

      /************************* Update and Digest the data ***************************/

      FileInputStream fis = new FileInputStream(args[0]);
      BufferedInputStream bis = new BufferedInputStream(fis);
      byte buffer[] = new byte[msgsize];

      int length;

      if(bis.available() != 0){
        length = bis.read(buffer);
        md.update(buffer,0,length);
        System.out.print(length + "\t\t");
      }

      bis.close();
      fis.close();

      /*
      * Now, that all the data to be digest is read in,
      * and updated (using update method )
      * generate a digest for it
      */

      byte[] realdigest = md.digest();

      end = getCurrentTime();

      System.out.println((end-begin));

      /*********** Save Digest in a file *************/
      FileOutputStream digfos = new FileOutputStream(args[0]+".sha_digest");
      digfos.write(realdigest);
      digfos.close();

    }catch(Exception e){
        e.printStackTrace();
      }

  }

}
