home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1998 October / DPPCPRO1098.ISO / Hotdog / files / snagpack.exe / MDIGEST.CLASS (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-21  |  2.9 KB  |  223 lines

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.InputStream;
  3. import java.io.PrintStream;
  4. import java.util.Random;
  5.  
  6. public abstract class mdigest {
  7.    public byte[] digestBits;
  8.    public boolean digestValid;
  9.    static byte[] testdata;
  10.  
  11.    public abstract String getAlg();
  12.  
  13.    public void updateASCII(String var1) {
  14.       int var3 = var1.length();
  15.  
  16.       for(int var2 = 0; var2 < var3; ++var2) {
  17.          byte var4 = (byte)(var1.charAt(var2) & 255);
  18.          this.update(var4);
  19.       }
  20.  
  21.    }
  22.  
  23.    public String toString() {
  24.       ByteArrayOutputStream var1 = new ByteArrayOutputStream();
  25.       PrintStream var2 = new PrintStream(var1);
  26.       var2.print(this.getClass().getName() + " Message Digest ");
  27.       if (this.digestValid) {
  28.          var2.print("<");
  29.  
  30.          for(int var3 = 0; var3 < this.digestBits.length; ++var3) {
  31.             this.hexDigit(var2, this.digestBits[var3]);
  32.          }
  33.  
  34.          var2.print(">");
  35.       } else {
  36.          var2.print("<incomplete>");
  37.       }
  38.  
  39.       var2.println();
  40.       return var1.toString();
  41.    }
  42.  
  43.    public static boolean isEqual(byte[] var0, byte[] var1) {
  44.       if (var0.length != var1.length) {
  45.          return false;
  46.       } else {
  47.          for(int var2 = 0; var2 < var0.length; ++var2) {
  48.             if (var0[var2] != var1[var2]) {
  49.                return false;
  50.             }
  51.          }
  52.  
  53.          return true;
  54.       }
  55.    }
  56.  
  57.    public boolean isEqual(byte[] var1) {
  58.       return isEqual(this.digestBits, var1);
  59.    }
  60.  
  61.    public static void benchmark(mdigest var0) {
  62.       Random var1 = new Random();
  63.       testdata = new byte[16384];
  64.       long[] var2 = new long[14];
  65.       double[] var3 = new double[14];
  66.  
  67.       for(int var4 = 0; var4 < testdata.length; ++var4) {
  68.          testdata[var4] = (byte)(var1.nextInt() >>> 8);
  69.       }
  70.  
  71.       System.out.println("Benchmarking " + var0.getAlg());
  72.       System.out.println("Bytes   Time (mS)   Rate (Bytes/Sec)");
  73.       int var8 = 1;
  74.  
  75.       do {
  76.          long var5 = System.currentTimeMillis();
  77.          var0.init();
  78.  
  79.          for(int var7 = 0; var7 < var8; ++var7) {
  80.             var0.update(testdata);
  81.          }
  82.  
  83.          var0.finish();
  84.          var2[var8] = System.currentTimeMillis() - var5;
  85.          var3[var8] = (double)(var8 * testdata.length) * (double)1000.0F / (double)var2[var8];
  86.          System.out.println(var8 * testdata.length + "\t" + var2[var8] + "\t" + var3[var8]);
  87.          ++var8;
  88.       } while(var8 < 10);
  89.  
  90.       System.out.println("Done.");
  91.    }
  92.  
  93.    public abstract void update(byte var1);
  94.  
  95.    public synchronized void update(boolean var1) {
  96.       byte var2;
  97.       if (var1) {
  98.          var2 = 1;
  99.       } else {
  100.          var2 = 0;
  101.       }
  102.  
  103.       this.update(var2);
  104.    }
  105.  
  106.    public synchronized void update(short var1) {
  107.       byte var2 = (byte)(var1 >>> 8 & 255);
  108.       byte var3 = (byte)(var1 & 255);
  109.       this.update(var2);
  110.       this.update(var3);
  111.    }
  112.  
  113.    public synchronized void update(int var1) {
  114.       int var3 = 3;
  115.  
  116.       do {
  117.          byte var2 = (byte)(var1 >>> var3 * 8 & 255);
  118.          this.update(var2);
  119.          --var3;
  120.       } while(var3 >= 0);
  121.  
  122.    }
  123.  
  124.    public synchronized void update(long var1) {
  125.       int var4 = 7;
  126.  
  127.       do {
  128.          byte var3 = (byte)((int)(var1 >>> var4 * 8 & 255L));
  129.          this.update(var3);
  130.          --var4;
  131.       } while(var4 >= 0);
  132.  
  133.    }
  134.  
  135.    public synchronized void update(byte[] var1, int var2, int var3) {
  136.       for(int var4 = 0; var4 < var3; ++var4) {
  137.          this.update(var1[var4 + var2]);
  138.       }
  139.  
  140.    }
  141.  
  142.    public synchronized void update(byte[] var1) {
  143.       this.update(var1, 0, var1.length);
  144.    }
  145.  
  146.    public synchronized void update(short[] var1) {
  147.       for(int var2 = 0; var2 < var1.length; ++var2) {
  148.          this.update(var1[var2]);
  149.       }
  150.  
  151.    }
  152.  
  153.    public synchronized void update(int[] var1) {
  154.       for(int var2 = 0; var2 < var1.length; ++var2) {
  155.          this.update(var1[var2]);
  156.       }
  157.  
  158.    }
  159.  
  160.    public synchronized void update(long[] var1) {
  161.       for(int var2 = 0; var2 < var1.length; ++var2) {
  162.          this.update(var1[var2]);
  163.       }
  164.  
  165.    }
  166.  
  167.    public void update(String var1) {
  168.       int var3 = var1.length();
  169.  
  170.       for(int var2 = 0; var2 < var3; ++var2) {
  171.          short var4 = (short)var1.charAt(var2);
  172.          this.update(var4);
  173.       }
  174.  
  175.    }
  176.  
  177.    public void update(InputStream var1) {
  178.       byte var2;
  179.       try {
  180.          while((var2 = (byte)var1.read()) != -1) {
  181.             this.update(var2);
  182.          }
  183.       } catch (Exception var3) {
  184.       }
  185.  
  186.    }
  187.  
  188.    private void hexDigit(PrintStream var1, byte var2) {
  189.       char var3 = (char)(var2 >> 4 & 15);
  190.       if (var3 > '\t') {
  191.          var3 = (char)(var3 - 10 + 65);
  192.       } else {
  193.          var3 = (char)(var3 + 48);
  194.       }
  195.  
  196.       var1.write(var3);
  197.       var3 = (char)(var2 & 15);
  198.       if (var3 > '\t') {
  199.          var3 = (char)(var3 - 10 + 65);
  200.       } else {
  201.          var3 = (char)(var3 + 48);
  202.       }
  203.  
  204.       var1.write(var3);
  205.    }
  206.  
  207.    public void computeDigest(byte[] var1) {
  208.       this.init();
  209.       this.update(var1);
  210.       this.finish();
  211.    }
  212.  
  213.    public void computeDigest(InputStream var1) {
  214.       this.init();
  215.       this.update(var1);
  216.       this.finish();
  217.    }
  218.  
  219.    public abstract void init();
  220.  
  221.    public abstract void finish();
  222. }
  223.