home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / security / provider / MD5.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  5.2 KB  |  277 lines

  1. package sun.security.provider;
  2.  
  3. import java.security.MessageDigest;
  4.  
  5. public final class MD5 extends MessageDigest implements Cloneable {
  6.    private byte[] digestBits;
  7.    private String algorithm;
  8.    private int[] state;
  9.    private long count;
  10.    private byte[] buffer;
  11.    private int[] transformBuffer;
  12.    private static final int S11 = 7;
  13.    private static final int S12 = 12;
  14.    private static final int S13 = 17;
  15.    private static final int S14 = 22;
  16.    private static final int S21 = 5;
  17.    private static final int S22 = 9;
  18.    private static final int S23 = 14;
  19.    private static final int S24 = 20;
  20.    private static final int S31 = 4;
  21.    private static final int S32 = 11;
  22.    private static final int S33 = 16;
  23.    private static final int S34 = 23;
  24.    private static final int S41 = 6;
  25.    private static final int S42 = 10;
  26.    private static final int S43 = 15;
  27.    private static final int S44 = 21;
  28.  
  29.    public MD5() {
  30.       super("MD5");
  31.       this.init();
  32.    }
  33.  
  34.    private MD5(MD5 var1) {
  35.       this();
  36.       this.state = (int[])var1.state.clone();
  37.       this.transformBuffer = (int[])var1.transformBuffer.clone();
  38.       this.buffer = (byte[])var1.buffer.clone();
  39.       this.digestBits = (byte[])var1.digestBits.clone();
  40.       this.count = var1.count;
  41.    }
  42.  
  43.    // $FF: renamed from: F (int, int, int) int
  44.    private int method_0(int var1, int var2, int var3) {
  45.       return var1 & var2 | ~var1 & var3;
  46.    }
  47.  
  48.    // $FF: renamed from: G (int, int, int) int
  49.    private int method_1(int var1, int var2, int var3) {
  50.       return var1 & var3 | var2 & ~var3;
  51.    }
  52.  
  53.    // $FF: renamed from: H (int, int, int) int
  54.    private int method_2(int var1, int var2, int var3) {
  55.       return var1 ^ var2 ^ var3;
  56.    }
  57.  
  58.    // $FF: renamed from: I (int, int, int) int
  59.    private int method_3(int var1, int var2, int var3) {
  60.       return var2 ^ (var1 | ~var3);
  61.    }
  62.  
  63.    private int rotateLeft(int var1, int var2) {
  64.       return var1 << var2 | var1 >>> 32 - var2;
  65.    }
  66.  
  67.    // $FF: renamed from: FF (int, int, int, int, int, int, int) int
  68.    private int method_4(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  69.       var1 += this.method_0(var2, var3, var4) + var5 + var7;
  70.       var1 = this.rotateLeft(var1, var6);
  71.       var1 += var2;
  72.       return var1;
  73.    }
  74.  
  75.    // $FF: renamed from: GG (int, int, int, int, int, int, int) int
  76.    private int method_5(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  77.       var1 += this.method_1(var2, var3, var4) + var5 + var7;
  78.       var1 = this.rotateLeft(var1, var6);
  79.       var1 += var2;
  80.       return var1;
  81.    }
  82.  
  83.    // $FF: renamed from: HH (int, int, int, int, int, int, int) int
  84.    private int method_6(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  85.       var1 += this.method_2(var2, var3, var4) + var5 + var7;
  86.       var1 = this.rotateLeft(var1, var6);
  87.       var1 += var2;
  88.       return var1;
  89.    }
  90.  
  91.    // $FF: renamed from: II (int, int, int, int, int, int, int) int
  92.    private int method_7(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  93.       var1 += this.method_3(var2, var3, var4) + var5 + var7;
  94.       var1 = this.rotateLeft(var1, var6);
  95.       var1 += var2;
  96.       return var1;
  97.    }
  98.  
  99.    void transform(byte[] var1, int var2) {
  100.       int[] var7 = this.transformBuffer;
  101.       int var3 = this.state[0];
  102.       int var4 = this.state[1];
  103.       int var5 = this.state[2];
  104.       int var6 = this.state[3];
  105.  
  106.       for(int var8 = 0; var8 < 16; ++var8) {
  107.          var7[var8] = var1[var8 * 4 + var2] & 255;
  108.  
  109.          for(int var9 = 1; var9 < 4; ++var9) {
  110.             var7[var8] += (var1[var8 * 4 + var9 + var2] & 255) << var9 * 8;
  111.          }
  112.       }
  113.  
  114.       var3 = this.method_4(var3, var4, var5, var6, var7[0], 7, -680876936);
  115.       var6 = this.method_4(var6, var3, var4, var5, var7[1], 12, -389564586);
  116.       var5 = this.method_4(var5, var6, var3, var4, var7[2], 17, 606105819);
  117.       var4 = this.method_4(var4, var5, var6, var3, var7[3], 22, -1044525330);
  118.       var3 = this.method_4(var3, var4, var5, var6, var7[4], 7, -176418897);
  119.       var6 = this.method_4(var6, var3, var4, var5, var7[5], 12, 1200080426);
  120.       var5 = this.method_4(var5, var6, var3, var4, var7[6], 17, -1473231341);
  121.       var4 = this.method_4(var4, var5, var6, var3, var7[7], 22, -45705983);
  122.       var3 = this.method_4(var3, var4, var5, var6, var7[8], 7, 1770035416);
  123.       var6 = this.method_4(var6, var3, var4, var5, var7[9], 12, -1958414417);
  124.       var5 = this.method_4(var5, var6, var3, var4, var7[10], 17, -42063);
  125.       var4 = this.method_4(var4, var5, var6, var3, var7[11], 22, -1990404162);
  126.       var3 = this.method_4(var3, var4, var5, var6, var7[12], 7, 1804603682);
  127.       var6 = this.method_4(var6, var3, var4, var5, var7[13], 12, -40341101);
  128.       var5 = this.method_4(var5, var6, var3, var4, var7[14], 17, -1502002290);
  129.       var4 = this.method_4(var4, var5, var6, var3, var7[15], 22, 1236535329);
  130.       var3 = this.method_5(var3, var4, var5, var6, var7[1], 5, -165796510);
  131.       var6 = this.method_5(var6, var3, var4, var5, var7[6], 9, -1069501632);
  132.       var5 = this.method_5(var5, var6, var3, var4, var7[11], 14, 643717713);
  133.       var4 = this.method_5(var4, var5, var6, var3, var7[0], 20, -373897302);
  134.       var3 = this.method_5(var3, var4, var5, var6, var7[5], 5, -701558691);
  135.       var6 = this.method_5(var6, var3, var4, var5, var7[10], 9, 38016083);
  136.       var5 = this.method_5(var5, var6, var3, var4, var7[15], 14, -660478335);
  137.       var4 = this.method_5(var4, var5, var6, var3, var7[4], 20, -405537848);
  138.       var3 = this.method_5(var3, var4, var5, var6, var7[9], 5, 568446438);
  139.       var6 = this.method_5(var6, var3, var4, var5, var7[14], 9, -1019803690);
  140.       var5 = this.method_5(var5, var6, var3, var4, var7[3], 14, -187363961);
  141.       var4 = this.method_5(var4, var5, var6, var3, var7[8], 20, 1163531501);
  142.       var3 = this.method_5(var3, var4, var5, var6, var7[13], 5, -1444681467);
  143.       var6 = this.method_5(var6, var3, var4, var5, var7[2], 9, -51403784);
  144.       var5 = this.method_5(var5, var6, var3, var4, var7[7], 14, 1735328473);
  145.       var4 = this.method_5(var4, var5, var6, var3, var7[12], 20, -1926607734);
  146.       var3 = this.method_6(var3, var4, var5, var6, var7[5], 4, -378558);
  147.       var6 = this.method_6(var6, var3, var4, var5, var7[8], 11, -2022574463);
  148.       var5 = this.method_6(var5, var6, var3, var4, var7[11], 16, 1839030562);
  149.       var4 = this.method_6(var4, var5, var6, var3, var7[14], 23, -35309556);
  150.       var3 = this.method_6(var3, var4, var5, var6, var7[1], 4, -1530992060);
  151.       var6 = this.method_6(var6, var3, var4, var5, var7[4], 11, 1272893353);
  152.       var5 = this.method_6(var5, var6, var3, var4, var7[7], 16, -155497632);
  153.       var4 = this.method_6(var4, var5, var6, var3, var7[10], 23, -1094730640);
  154.       var3 = this.method_6(var3, var4, var5, var6, var7[13], 4, 681279174);
  155.       var6 = this.method_6(var6, var3, var4, var5, var7[0], 11, -358537222);
  156.       var5 = this.method_6(var5, var6, var3, var4, var7[3], 16, -722521979);
  157.       var4 = this.method_6(var4, var5, var6, var3, var7[6], 23, 76029189);
  158.       var3 = this.method_6(var3, var4, var5, var6, var7[9], 4, -640364487);
  159.       var6 = this.method_6(var6, var3, var4, var5, var7[12], 11, -421815835);
  160.       var5 = this.method_6(var5, var6, var3, var4, var7[15], 16, 530742520);
  161.       var4 = this.method_6(var4, var5, var6, var3, var7[2], 23, -995338651);
  162.       var3 = this.method_7(var3, var4, var5, var6, var7[0], 6, -198630844);
  163.       var6 = this.method_7(var6, var3, var4, var5, var7[7], 10, 1126891415);
  164.       var5 = this.method_7(var5, var6, var3, var4, var7[14], 15, -1416354905);
  165.       var4 = this.method_7(var4, var5, var6, var3, var7[5], 21, -57434055);
  166.       var3 = this.method_7(var3, var4, var5, var6, var7[12], 6, 1700485571);
  167.       var6 = this.method_7(var6, var3, var4, var5, var7[3], 10, -1894986606);
  168.       var5 = this.method_7(var5, var6, var3, var4, var7[10], 15, -1051523);
  169.       var4 = this.method_7(var4, var5, var6, var3, var7[1], 21, -2054922799);
  170.       var3 = this.method_7(var3, var4, var5, var6, var7[8], 6, 1873313359);
  171.       var6 = this.method_7(var6, var3, var4, var5, var7[15], 10, -30611744);
  172.       var5 = this.method_7(var5, var6, var3, var4, var7[6], 15, -1560198380);
  173.       var4 = this.method_7(var4, var5, var6, var3, var7[13], 21, 1309151649);
  174.       var3 = this.method_7(var3, var4, var5, var6, var7[4], 6, -145523070);
  175.       var6 = this.method_7(var6, var3, var4, var5, var7[11], 10, -1120210379);
  176.       var5 = this.method_7(var5, var6, var3, var4, var7[2], 15, 718787259);
  177.       var4 = this.method_7(var4, var5, var6, var3, var7[9], 21, -343485551);
  178.       int[] var10000 = this.state;
  179.       var10000[0] += var3;
  180.       var10000 = this.state;
  181.       var10000[1] += var4;
  182.       var10000 = this.state;
  183.       var10000[2] += var5;
  184.       var10000 = this.state;
  185.       var10000[3] += var6;
  186.    }
  187.  
  188.    public void init() {
  189.       this.state = new int[4];
  190.       this.transformBuffer = new int[16];
  191.       this.buffer = new byte[64];
  192.       this.digestBits = new byte[16];
  193.       this.count = 0L;
  194.       this.state[0] = 1732584193;
  195.       this.state[1] = -271733879;
  196.       this.state[2] = -1732584194;
  197.       this.state[3] = 271733878;
  198.  
  199.       for(int var1 = 0; var1 < this.digestBits.length; ++var1) {
  200.          this.digestBits[var1] = 0;
  201.       }
  202.  
  203.    }
  204.  
  205.    protected void engineReset() {
  206.       this.init();
  207.    }
  208.  
  209.    protected synchronized void engineUpdate(byte var1) {
  210.       int var2 = (int)(this.count >>> 3 & 63L);
  211.       this.count += 8L;
  212.       this.buffer[var2] = var1;
  213.       if (var2 >= 63) {
  214.          this.transform(this.buffer, 0);
  215.       }
  216.  
  217.    }
  218.  
  219.    protected synchronized void engineUpdate(byte[] var1, int var2, int var3) {
  220.       int var4 = var2;
  221.  
  222.       while(var3 > 0) {
  223.          int var5 = (int)(this.count >>> 3 & 63L);
  224.          if (var5 == 0 && var3 > 64) {
  225.             this.count += 512L;
  226.             this.transform(var1, var4);
  227.             var3 -= 64;
  228.             var4 += 64;
  229.          } else {
  230.             this.count += 8L;
  231.             this.buffer[var5] = var1[var4];
  232.             if (var5 >= 63) {
  233.                this.transform(this.buffer, 0);
  234.             }
  235.  
  236.             ++var4;
  237.             --var3;
  238.          }
  239.       }
  240.  
  241.    }
  242.  
  243.    private void finish() {
  244.       byte[] var1 = new byte[8];
  245.  
  246.       for(int var3 = 0; var3 < 8; ++var3) {
  247.          var1[var3] = (byte)((int)(this.count >>> var3 * 8 & 255L));
  248.       }
  249.  
  250.       int var4 = (int)(this.count >> 3) & 63;
  251.       int var5 = var4 < 56 ? 56 - var4 : 120 - var4;
  252.       byte[] var2 = new byte[var5];
  253.       var2[0] = -128;
  254.       this.engineUpdate(var2, 0, var2.length);
  255.       this.engineUpdate(var1, 0, var1.length);
  256.  
  257.       for(int var7 = 0; var7 < 4; ++var7) {
  258.          for(int var6 = 0; var6 < 4; ++var6) {
  259.             this.digestBits[var7 * 4 + var6] = (byte)(this.state[var7] >>> var6 * 8 & 255);
  260.          }
  261.       }
  262.  
  263.    }
  264.  
  265.    protected byte[] engineDigest() {
  266.       this.finish();
  267.       byte[] var1 = new byte[16];
  268.       System.arraycopy(this.digestBits, 0, var1, 0, 16);
  269.       this.init();
  270.       return var1;
  271.    }
  272.  
  273.    public Object clone() {
  274.       return new MD5(this);
  275.    }
  276. }
  277.