home *** CD-ROM | disk | FTP | other *** search
- package sun.security.provider;
-
- import java.security.MessageDigest;
-
- public final class MD5 extends MessageDigest implements Cloneable {
- private byte[] digestBits;
- private String algorithm;
- private int[] state;
- private long count;
- private byte[] buffer;
- private int[] transformBuffer;
- private static final int S11 = 7;
- private static final int S12 = 12;
- private static final int S13 = 17;
- private static final int S14 = 22;
- private static final int S21 = 5;
- private static final int S22 = 9;
- private static final int S23 = 14;
- private static final int S24 = 20;
- private static final int S31 = 4;
- private static final int S32 = 11;
- private static final int S33 = 16;
- private static final int S34 = 23;
- private static final int S41 = 6;
- private static final int S42 = 10;
- private static final int S43 = 15;
- private static final int S44 = 21;
-
- public MD5() {
- super("MD5");
- this.init();
- }
-
- private MD5(MD5 var1) {
- this();
- this.state = (int[])var1.state.clone();
- this.transformBuffer = (int[])var1.transformBuffer.clone();
- this.buffer = (byte[])var1.buffer.clone();
- this.digestBits = (byte[])var1.digestBits.clone();
- this.count = var1.count;
- }
-
- // $FF: renamed from: FF (int, int, int, int, int, int, int) int
- private int method_0(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
- var1 += (var2 & var3 | ~var2 & var4) + var5 + var7;
- return (var1 << var6 | var1 >>> 32 - var6) + var2;
- }
-
- // $FF: renamed from: GG (int, int, int, int, int, int, int) int
- private int method_1(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
- var1 += (var2 & var4 | var3 & ~var4) + var5 + var7;
- return (var1 << var6 | var1 >>> 32 - var6) + var2;
- }
-
- // $FF: renamed from: HH (int, int, int, int, int, int, int) int
- private int method_2(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
- var1 += (var2 ^ var3 ^ var4) + var5 + var7;
- return (var1 << var6 | var1 >>> 32 - var6) + var2;
- }
-
- // $FF: renamed from: II (int, int, int, int, int, int, int) int
- private int method_3(int var1, int var2, int var3, int var4, int var5, int var6, int var7) {
- var1 += (var3 ^ (var2 | ~var4)) + var5 + var7;
- return (var1 << var6 | var1 >>> 32 - var6) + var2;
- }
-
- void transform(byte[] var1, int var2) {
- int[] var7 = this.transformBuffer;
- int var3 = this.state[0];
- int var4 = this.state[1];
- int var5 = this.state[2];
- int var6 = this.state[3];
-
- for(int var8 = 0; var8 < 16; ++var8) {
- var7[var8] = var1[var8 * 4 + var2] & 255;
-
- for(int var9 = 1; var9 < 4; ++var9) {
- var7[var8] += (var1[var8 * 4 + var9 + var2] & 255) << var9 * 8;
- }
- }
-
- var3 = this.method_0(var3, var4, var5, var6, var7[0], 7, -680876936);
- var6 = this.method_0(var6, var3, var4, var5, var7[1], 12, -389564586);
- var5 = this.method_0(var5, var6, var3, var4, var7[2], 17, 606105819);
- var4 = this.method_0(var4, var5, var6, var3, var7[3], 22, -1044525330);
- var3 = this.method_0(var3, var4, var5, var6, var7[4], 7, -176418897);
- var6 = this.method_0(var6, var3, var4, var5, var7[5], 12, 1200080426);
- var5 = this.method_0(var5, var6, var3, var4, var7[6], 17, -1473231341);
- var4 = this.method_0(var4, var5, var6, var3, var7[7], 22, -45705983);
- var3 = this.method_0(var3, var4, var5, var6, var7[8], 7, 1770035416);
- var6 = this.method_0(var6, var3, var4, var5, var7[9], 12, -1958414417);
- var5 = this.method_0(var5, var6, var3, var4, var7[10], 17, -42063);
- var4 = this.method_0(var4, var5, var6, var3, var7[11], 22, -1990404162);
- var3 = this.method_0(var3, var4, var5, var6, var7[12], 7, 1804603682);
- var6 = this.method_0(var6, var3, var4, var5, var7[13], 12, -40341101);
- var5 = this.method_0(var5, var6, var3, var4, var7[14], 17, -1502002290);
- var4 = this.method_0(var4, var5, var6, var3, var7[15], 22, 1236535329);
- var3 = this.method_1(var3, var4, var5, var6, var7[1], 5, -165796510);
- var6 = this.method_1(var6, var3, var4, var5, var7[6], 9, -1069501632);
- var5 = this.method_1(var5, var6, var3, var4, var7[11], 14, 643717713);
- var4 = this.method_1(var4, var5, var6, var3, var7[0], 20, -373897302);
- var3 = this.method_1(var3, var4, var5, var6, var7[5], 5, -701558691);
- var6 = this.method_1(var6, var3, var4, var5, var7[10], 9, 38016083);
- var5 = this.method_1(var5, var6, var3, var4, var7[15], 14, -660478335);
- var4 = this.method_1(var4, var5, var6, var3, var7[4], 20, -405537848);
- var3 = this.method_1(var3, var4, var5, var6, var7[9], 5, 568446438);
- var6 = this.method_1(var6, var3, var4, var5, var7[14], 9, -1019803690);
- var5 = this.method_1(var5, var6, var3, var4, var7[3], 14, -187363961);
- var4 = this.method_1(var4, var5, var6, var3, var7[8], 20, 1163531501);
- var3 = this.method_1(var3, var4, var5, var6, var7[13], 5, -1444681467);
- var6 = this.method_1(var6, var3, var4, var5, var7[2], 9, -51403784);
- var5 = this.method_1(var5, var6, var3, var4, var7[7], 14, 1735328473);
- var4 = this.method_1(var4, var5, var6, var3, var7[12], 20, -1926607734);
- var3 = this.method_2(var3, var4, var5, var6, var7[5], 4, -378558);
- var6 = this.method_2(var6, var3, var4, var5, var7[8], 11, -2022574463);
- var5 = this.method_2(var5, var6, var3, var4, var7[11], 16, 1839030562);
- var4 = this.method_2(var4, var5, var6, var3, var7[14], 23, -35309556);
- var3 = this.method_2(var3, var4, var5, var6, var7[1], 4, -1530992060);
- var6 = this.method_2(var6, var3, var4, var5, var7[4], 11, 1272893353);
- var5 = this.method_2(var5, var6, var3, var4, var7[7], 16, -155497632);
- var4 = this.method_2(var4, var5, var6, var3, var7[10], 23, -1094730640);
- var3 = this.method_2(var3, var4, var5, var6, var7[13], 4, 681279174);
- var6 = this.method_2(var6, var3, var4, var5, var7[0], 11, -358537222);
- var5 = this.method_2(var5, var6, var3, var4, var7[3], 16, -722521979);
- var4 = this.method_2(var4, var5, var6, var3, var7[6], 23, 76029189);
- var3 = this.method_2(var3, var4, var5, var6, var7[9], 4, -640364487);
- var6 = this.method_2(var6, var3, var4, var5, var7[12], 11, -421815835);
- var5 = this.method_2(var5, var6, var3, var4, var7[15], 16, 530742520);
- var4 = this.method_2(var4, var5, var6, var3, var7[2], 23, -995338651);
- var3 = this.method_3(var3, var4, var5, var6, var7[0], 6, -198630844);
- var6 = this.method_3(var6, var3, var4, var5, var7[7], 10, 1126891415);
- var5 = this.method_3(var5, var6, var3, var4, var7[14], 15, -1416354905);
- var4 = this.method_3(var4, var5, var6, var3, var7[5], 21, -57434055);
- var3 = this.method_3(var3, var4, var5, var6, var7[12], 6, 1700485571);
- var6 = this.method_3(var6, var3, var4, var5, var7[3], 10, -1894986606);
- var5 = this.method_3(var5, var6, var3, var4, var7[10], 15, -1051523);
- var4 = this.method_3(var4, var5, var6, var3, var7[1], 21, -2054922799);
- var3 = this.method_3(var3, var4, var5, var6, var7[8], 6, 1873313359);
- var6 = this.method_3(var6, var3, var4, var5, var7[15], 10, -30611744);
- var5 = this.method_3(var5, var6, var3, var4, var7[6], 15, -1560198380);
- var4 = this.method_3(var4, var5, var6, var3, var7[13], 21, 1309151649);
- var3 = this.method_3(var3, var4, var5, var6, var7[4], 6, -145523070);
- var6 = this.method_3(var6, var3, var4, var5, var7[11], 10, -1120210379);
- var5 = this.method_3(var5, var6, var3, var4, var7[2], 15, 718787259);
- var4 = this.method_3(var4, var5, var6, var3, var7[9], 21, -343485551);
- int[] var10000 = this.state;
- var10000[0] += var3;
- var10000 = this.state;
- var10000[1] += var4;
- var10000 = this.state;
- var10000[2] += var5;
- var10000 = this.state;
- var10000[3] += var6;
- }
-
- public void init() {
- this.state = new int[4];
- this.transformBuffer = new int[16];
- this.buffer = new byte[64];
- this.digestBits = new byte[16];
- this.count = 0L;
- this.state[0] = 1732584193;
- this.state[1] = -271733879;
- this.state[2] = -1732584194;
- this.state[3] = 271733878;
-
- for(int var1 = 0; var1 < this.digestBits.length; ++var1) {
- this.digestBits[var1] = 0;
- }
-
- }
-
- protected void engineReset() {
- this.init();
- }
-
- protected synchronized void engineUpdate(byte var1) {
- int var2 = (int)(this.count >>> 3 & 63L);
- this.count += 8L;
- this.buffer[var2] = var1;
- if (var2 >= 63) {
- this.transform(this.buffer, 0);
- }
-
- }
-
- protected synchronized void engineUpdate(byte[] var1, int var2, int var3) {
- int var4 = var2;
-
- while(var3 > 0) {
- int var5 = (int)(this.count >>> 3 & 63L);
- if (var5 == 0 && var3 > 64) {
- this.count += 512L;
- this.transform(var1, var4);
- var3 -= 64;
- var4 += 64;
- } else {
- this.count += 8L;
- this.buffer[var5] = var1[var4];
- if (var5 >= 63) {
- this.transform(this.buffer, 0);
- }
-
- ++var4;
- --var3;
- }
- }
-
- }
-
- private void finish() {
- byte[] var1 = new byte[8];
-
- for(int var3 = 0; var3 < 8; ++var3) {
- var1[var3] = (byte)((int)(this.count >>> var3 * 8 & 255L));
- }
-
- int var4 = (int)(this.count >> 3) & 63;
- int var5 = var4 < 56 ? 56 - var4 : 120 - var4;
- byte[] var2 = new byte[var5];
- var2[0] = -128;
- this.engineUpdate(var2, 0, var2.length);
- this.engineUpdate(var1, 0, var1.length);
-
- for(int var7 = 0; var7 < 4; ++var7) {
- for(int var6 = 0; var6 < 4; ++var6) {
- this.digestBits[var7 * 4 + var6] = (byte)(this.state[var7] >>> var6 * 8 & 255);
- }
- }
-
- }
-
- protected byte[] engineDigest() {
- this.finish();
- byte[] var1 = new byte[16];
- System.arraycopy(this.digestBits, 0, var1, 0, 16);
- this.init();
- return var1;
- }
-
- public Object clone() {
- return new MD5(this);
- }
- }
-