home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / security / provider / MD5.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  4.9 KB  |  245 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: FF (int, int, int, int, int, int, int) int
  44.    private int method_0(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  45.       var1 += (var2 & var3 | ~var2 & var4) + var5 + var7;
  46.       return (var1 << var6 | var1 >>> 32 - var6) + var2;
  47.    }
  48.  
  49.    // $FF: renamed from: GG (int, int, int, int, int, int, int) int
  50.    private int method_1(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  51.       var1 += (var2 & var4 | var3 & ~var4) + var5 + var7;
  52.       return (var1 << var6 | var1 >>> 32 - var6) + var2;
  53.    }
  54.  
  55.    // $FF: renamed from: HH (int, int, int, int, int, int, int) int
  56.    private int method_2(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  57.       var1 += (var2 ^ var3 ^ var4) + var5 + var7;
  58.       return (var1 << var6 | var1 >>> 32 - var6) + var2;
  59.    }
  60.  
  61.    // $FF: renamed from: II (int, int, int, int, int, int, int) int
  62.    private int method_3(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  63.       var1 += (var3 ^ (var2 | ~var4)) + var5 + var7;
  64.       return (var1 << var6 | var1 >>> 32 - var6) + var2;
  65.    }
  66.  
  67.    void transform(byte[] var1, int var2) {
  68.       int[] var7 = this.transformBuffer;
  69.       int var3 = this.state[0];
  70.       int var4 = this.state[1];
  71.       int var5 = this.state[2];
  72.       int var6 = this.state[3];
  73.  
  74.       for(int var8 = 0; var8 < 16; ++var8) {
  75.          var7[var8] = var1[var8 * 4 + var2] & 255;
  76.  
  77.          for(int var9 = 1; var9 < 4; ++var9) {
  78.             var7[var8] += (var1[var8 * 4 + var9 + var2] & 255) << var9 * 8;
  79.          }
  80.       }
  81.  
  82.       var3 = this.method_0(var3, var4, var5, var6, var7[0], 7, -680876936);
  83.       var6 = this.method_0(var6, var3, var4, var5, var7[1], 12, -389564586);
  84.       var5 = this.method_0(var5, var6, var3, var4, var7[2], 17, 606105819);
  85.       var4 = this.method_0(var4, var5, var6, var3, var7[3], 22, -1044525330);
  86.       var3 = this.method_0(var3, var4, var5, var6, var7[4], 7, -176418897);
  87.       var6 = this.method_0(var6, var3, var4, var5, var7[5], 12, 1200080426);
  88.       var5 = this.method_0(var5, var6, var3, var4, var7[6], 17, -1473231341);
  89.       var4 = this.method_0(var4, var5, var6, var3, var7[7], 22, -45705983);
  90.       var3 = this.method_0(var3, var4, var5, var6, var7[8], 7, 1770035416);
  91.       var6 = this.method_0(var6, var3, var4, var5, var7[9], 12, -1958414417);
  92.       var5 = this.method_0(var5, var6, var3, var4, var7[10], 17, -42063);
  93.       var4 = this.method_0(var4, var5, var6, var3, var7[11], 22, -1990404162);
  94.       var3 = this.method_0(var3, var4, var5, var6, var7[12], 7, 1804603682);
  95.       var6 = this.method_0(var6, var3, var4, var5, var7[13], 12, -40341101);
  96.       var5 = this.method_0(var5, var6, var3, var4, var7[14], 17, -1502002290);
  97.       var4 = this.method_0(var4, var5, var6, var3, var7[15], 22, 1236535329);
  98.       var3 = this.method_1(var3, var4, var5, var6, var7[1], 5, -165796510);
  99.       var6 = this.method_1(var6, var3, var4, var5, var7[6], 9, -1069501632);
  100.       var5 = this.method_1(var5, var6, var3, var4, var7[11], 14, 643717713);
  101.       var4 = this.method_1(var4, var5, var6, var3, var7[0], 20, -373897302);
  102.       var3 = this.method_1(var3, var4, var5, var6, var7[5], 5, -701558691);
  103.       var6 = this.method_1(var6, var3, var4, var5, var7[10], 9, 38016083);
  104.       var5 = this.method_1(var5, var6, var3, var4, var7[15], 14, -660478335);
  105.       var4 = this.method_1(var4, var5, var6, var3, var7[4], 20, -405537848);
  106.       var3 = this.method_1(var3, var4, var5, var6, var7[9], 5, 568446438);
  107.       var6 = this.method_1(var6, var3, var4, var5, var7[14], 9, -1019803690);
  108.       var5 = this.method_1(var5, var6, var3, var4, var7[3], 14, -187363961);
  109.       var4 = this.method_1(var4, var5, var6, var3, var7[8], 20, 1163531501);
  110.       var3 = this.method_1(var3, var4, var5, var6, var7[13], 5, -1444681467);
  111.       var6 = this.method_1(var6, var3, var4, var5, var7[2], 9, -51403784);
  112.       var5 = this.method_1(var5, var6, var3, var4, var7[7], 14, 1735328473);
  113.       var4 = this.method_1(var4, var5, var6, var3, var7[12], 20, -1926607734);
  114.       var3 = this.method_2(var3, var4, var5, var6, var7[5], 4, -378558);
  115.       var6 = this.method_2(var6, var3, var4, var5, var7[8], 11, -2022574463);
  116.       var5 = this.method_2(var5, var6, var3, var4, var7[11], 16, 1839030562);
  117.       var4 = this.method_2(var4, var5, var6, var3, var7[14], 23, -35309556);
  118.       var3 = this.method_2(var3, var4, var5, var6, var7[1], 4, -1530992060);
  119.       var6 = this.method_2(var6, var3, var4, var5, var7[4], 11, 1272893353);
  120.       var5 = this.method_2(var5, var6, var3, var4, var7[7], 16, -155497632);
  121.       var4 = this.method_2(var4, var5, var6, var3, var7[10], 23, -1094730640);
  122.       var3 = this.method_2(var3, var4, var5, var6, var7[13], 4, 681279174);
  123.       var6 = this.method_2(var6, var3, var4, var5, var7[0], 11, -358537222);
  124.       var5 = this.method_2(var5, var6, var3, var4, var7[3], 16, -722521979);
  125.       var4 = this.method_2(var4, var5, var6, var3, var7[6], 23, 76029189);
  126.       var3 = this.method_2(var3, var4, var5, var6, var7[9], 4, -640364487);
  127.       var6 = this.method_2(var6, var3, var4, var5, var7[12], 11, -421815835);
  128.       var5 = this.method_2(var5, var6, var3, var4, var7[15], 16, 530742520);
  129.       var4 = this.method_2(var4, var5, var6, var3, var7[2], 23, -995338651);
  130.       var3 = this.method_3(var3, var4, var5, var6, var7[0], 6, -198630844);
  131.       var6 = this.method_3(var6, var3, var4, var5, var7[7], 10, 1126891415);
  132.       var5 = this.method_3(var5, var6, var3, var4, var7[14], 15, -1416354905);
  133.       var4 = this.method_3(var4, var5, var6, var3, var7[5], 21, -57434055);
  134.       var3 = this.method_3(var3, var4, var5, var6, var7[12], 6, 1700485571);
  135.       var6 = this.method_3(var6, var3, var4, var5, var7[3], 10, -1894986606);
  136.       var5 = this.method_3(var5, var6, var3, var4, var7[10], 15, -1051523);
  137.       var4 = this.method_3(var4, var5, var6, var3, var7[1], 21, -2054922799);
  138.       var3 = this.method_3(var3, var4, var5, var6, var7[8], 6, 1873313359);
  139.       var6 = this.method_3(var6, var3, var4, var5, var7[15], 10, -30611744);
  140.       var5 = this.method_3(var5, var6, var3, var4, var7[6], 15, -1560198380);
  141.       var4 = this.method_3(var4, var5, var6, var3, var7[13], 21, 1309151649);
  142.       var3 = this.method_3(var3, var4, var5, var6, var7[4], 6, -145523070);
  143.       var6 = this.method_3(var6, var3, var4, var5, var7[11], 10, -1120210379);
  144.       var5 = this.method_3(var5, var6, var3, var4, var7[2], 15, 718787259);
  145.       var4 = this.method_3(var4, var5, var6, var3, var7[9], 21, -343485551);
  146.       int[] var10000 = this.state;
  147.       var10000[0] += var3;
  148.       var10000 = this.state;
  149.       var10000[1] += var4;
  150.       var10000 = this.state;
  151.       var10000[2] += var5;
  152.       var10000 = this.state;
  153.       var10000[3] += var6;
  154.    }
  155.  
  156.    public void init() {
  157.       this.state = new int[4];
  158.       this.transformBuffer = new int[16];
  159.       this.buffer = new byte[64];
  160.       this.digestBits = new byte[16];
  161.       this.count = 0L;
  162.       this.state[0] = 1732584193;
  163.       this.state[1] = -271733879;
  164.       this.state[2] = -1732584194;
  165.       this.state[3] = 271733878;
  166.  
  167.       for(int var1 = 0; var1 < this.digestBits.length; ++var1) {
  168.          this.digestBits[var1] = 0;
  169.       }
  170.  
  171.    }
  172.  
  173.    protected void engineReset() {
  174.       this.init();
  175.    }
  176.  
  177.    protected synchronized void engineUpdate(byte var1) {
  178.       int var2 = (int)(this.count >>> 3 & 63L);
  179.       this.count += 8L;
  180.       this.buffer[var2] = var1;
  181.       if (var2 >= 63) {
  182.          this.transform(this.buffer, 0);
  183.       }
  184.  
  185.    }
  186.  
  187.    protected synchronized void engineUpdate(byte[] var1, int var2, int var3) {
  188.       int var4 = var2;
  189.  
  190.       while(var3 > 0) {
  191.          int var5 = (int)(this.count >>> 3 & 63L);
  192.          if (var5 == 0 && var3 > 64) {
  193.             this.count += 512L;
  194.             this.transform(var1, var4);
  195.             var3 -= 64;
  196.             var4 += 64;
  197.          } else {
  198.             this.count += 8L;
  199.             this.buffer[var5] = var1[var4];
  200.             if (var5 >= 63) {
  201.                this.transform(this.buffer, 0);
  202.             }
  203.  
  204.             ++var4;
  205.             --var3;
  206.          }
  207.       }
  208.  
  209.    }
  210.  
  211.    private void finish() {
  212.       byte[] var1 = new byte[8];
  213.  
  214.       for(int var3 = 0; var3 < 8; ++var3) {
  215.          var1[var3] = (byte)((int)(this.count >>> var3 * 8 & 255L));
  216.       }
  217.  
  218.       int var4 = (int)(this.count >> 3) & 63;
  219.       int var5 = var4 < 56 ? 56 - var4 : 120 - var4;
  220.       byte[] var2 = new byte[var5];
  221.       var2[0] = -128;
  222.       this.engineUpdate(var2, 0, var2.length);
  223.       this.engineUpdate(var1, 0, var1.length);
  224.  
  225.       for(int var7 = 0; var7 < 4; ++var7) {
  226.          for(int var6 = 0; var6 < 4; ++var6) {
  227.             this.digestBits[var7 * 4 + var6] = (byte)(this.state[var7] >>> var6 * 8 & 255);
  228.          }
  229.       }
  230.  
  231.    }
  232.  
  233.    protected byte[] engineDigest() {
  234.       this.finish();
  235.       byte[] var1 = new byte[16];
  236.       System.arraycopy(this.digestBits, 0, var1, 0, 16);
  237.       this.init();
  238.       return var1;
  239.    }
  240.  
  241.    public Object clone() {
  242.       return new MD5(this);
  243.    }
  244. }
  245.