/*
* File : Md5AlgorithmHelper.java
* Created : 16 avr. 2004
* By : Olivier
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.gudy.azureus2.core3.util.test;
/**
* @author Olivier Chalouhi
*
*/
public class Md5AlgorithmHelper {
public static final int S11 = 7;
public static final int S12 = 12;
public static final int S13 = 17;
public static final int S14 = 22;
public static final int S21 = 5;
public static final int S22 = 9;
public static final int S23 = 14;
public static final int S24 = 20;
public static final int S31 = 4;
public static final int S32 = 11;
public static final int S33 = 16;
public static final int S34 = 23;
public static final int S41 = 6;
public static final int S42 = 10;
public static final int S43 = 15;
public static final int S44 = 21;
public static void main(String args[]) {
/* Round 1 */
String a = "a";
String b = "b";
String c = "c";
String d = "d";
pFF (a, b, c, d, 0, S11, "0xd76aa478"); /* 1 */
pFF (d, a, b, c, 1, S12, "0xe8c7b756"); /* 2 */
pFF (c, d, a, b, 2, S13, "0x242070db"); /* 3 */
pFF (b, c, d, a, 3, S14, "0xc1bdceee"); /* 4 */
pFF (a, b, c, d, 4, S11, "0xf57c0faf"); /* 5 */
pFF (d, a, b, c, 5, S12, "0x4787c62a"); /* 6 */
pFF (c, d, a, b, 6, S13, "0xa8304613"); /* 7 */
pFF (b, c, d, a, 7, S14, "0xfd469501"); /* 8 */
pFF (a, b, c, d, 8, S11, "0x698098d8"); /* 9 */
pFF (d, a, b, c, 9, S12, "0x8b44f7af"); /* 10 */
pFF (c, d, a, b, 10, S13,"0xffff5bb1"); /* 11 */
pFF (b, c, d, a, 11, S14,"0x895cd7be"); /* 12 */
pFF (a, b, c, d, 12, S11,"0x6b901122"); /* 13 */
pFF (d, a, b, c, 13, S12,"0xfd987193"); /* 14 */
pFF (c, d, a, b, 14, S13,"0xa679438e"); /* 15 */
pFF (b, c, d, a, 15, S14,"0x49b40821"); /* 16 */
/* Round 2 */
pGG (a, b, c, d, 1, S21, "0xf61e2562"); /* 17 */
pGG (d, a, b, c, 6, S22, "0xc040b340"); /* 18 */
pGG (c, d, a, b, 11, S23,"0x265e5a51"); /* 19 */
pGG (b, c, d, a, 0, S24, "0xe9b6c7aa"); /* 20 */
pGG (a, b, c, d, 5, S21, "0xd62f105d"); /* 21 */
pGG (d, a, b, c, 10, S22,"0x02441453"); /* 22 */
pGG (c, d, a, b, 15, S23,"0xd8a1e681"); /* 23 */
pGG (b, c, d, a, 4, S24, "0xe7d3fbc8"); /* 24 */
pGG (a, b, c, d, 9, S21, "0x21e1cde6"); /* 25 */
pGG (d, a, b, c, 14, S22,"0xc33707d6"); /* 26 */
pGG (c, d, a, b, 3, S23, "0xf4d50d87"); /* 27 */
pGG (b, c, d, a, 8, S24, "0x455a14ed"); /* 28 */
pGG (a, b, c, d, 13, S21,"0xa9e3e905"); /* 29 */
pGG (d, a, b, c, 2, S22, "0xfcefa3f8"); /* 30 */
pGG (c, d, a, b, 7, S23, "0x676f02d9"); /* 31 */
pGG (b, c, d, a, 12, S24,"0x8d2a4c8a"); /* 32 */
/* Round 3 */
pHH (a, b, c, d, 5, S31, "0xfffa3942"); /* 33 */
pHH (d, a, b, c, 8, S32, "0x8771f681"); /* 34 */
pHH (c, d, a, b, 11, S33,"0x6d9d6122"); /* 35 */
pHH (b, c, d, a, 14, S34,"0xfde5380c"); /* 36 */
pHH (a, b, c, d, 1, S31, "0xa4beea44"); /* 37 */
pHH (d, a, b, c, 4, S32, "0x4bdecfa9"); /* 38 */
pHH (c, d, a, b, 7, S33, "0xf6bb4b60"); /* 39 */
pHH (b, c, d, a, 10, S34,"0xbebfbc70"); /* 40 */
pHH (a, b, c, d, 13, S31,"0x289b7ec6"); /* 41 */
pHH (d, a, b, c, 0, S32, "0xeaa127fa"); /* 42 */
pHH (c, d, a, b, 3, S33, "0xd4ef3085"); /* 43 */
pHH (b, c, d, a, 6, S34, "0x04881d05"); /* 44 */
pHH (a, b, c, d, 9, S31, "0xd9d4d039"); /* 45 */
pHH (d, a, b, c, 12, S32,"0xe6db99e5"); /* 46 */
pHH (c, d, a, b, 15, S33,"0x1fa27cf8"); /* 47 */
pHH (b, c, d, a, 2, S34, "0xc4ac5665"); /* 48 */
/* Round 4 */
pII (a, b, c, d, 0, S41, "0xf4292244"); /* 49 */
pII (d, a, b, c, 7, S42, "0x432aff97"); /* 50 */
pII (c, d, a, b, 14, S43,"0xab9423a7"); /* 51 */
pII (b, c, d, a, 5, S44, "0xfc93a039"); /* 52 */
pII (a, b, c, d, 12, S41,"0x655b59c3"); /* 53 */
pII (d, a, b, c, 3, S42, "0x8f0ccc92"); /* 54 */
pII (c, d, a, b, 10, S43,"0xffeff47d"); /* 55 */
pII (b, c, d, a, 1, S44, "0x85845dd1"); /* 56 */
pII (a, b, c, d, 8, S41, "0x6fa87e4f"); /* 57 */
pII (d, a, b, c, 15, S42,"0xfe2ce6e0"); /* 58 */
pII (c, d, a, b, 6, S43, "0xa3014314"); /* 59 */
pII (b, c, d, a, 13, S44,"0x4e0811a1"); /* 60 */
pII (a, b, c, d, 4, S41, "0xf7537e82"); /* 61 */
pII (d, a, b, c, 11, S42,"0xbd3af235"); /* 62 */
pII (c, d, a, b, 2, S43, "0x2ad7d2bb"); /* 63 */
pII (b, c, d, a, 9, S44, "0xeb86d391"); /* 64 */
}
public static String F(String x,String y,String z) {
return "((" + x + " & " + y + ") | ( ~" + x + " & " + z + "))";
}
public static String G(String x,String y,String z) {
return "((" + x + " & " + z + ") | (" + y + " & ~" + z + "))";
}
public static String H(String x,String y,String z) {
return "(" + x + " ^ " + y + " ^ " + z + ")";
}
public static String I(String x,String y,String z) {
return "(" + y + " ^ (" + x + " | ~" + z + "))";
}
public static String rotateLeft(String x,int n) {
return "((" + x + " << " + n + ") | (" + x + " >>> " + (32-n) + "))";
}
public static int T(int i) {
return (int) (4294967296.0 * Math.abs(Math.sin(i)));
}
public static String pFF(String a,String b,String c,String d,int x, int s, String Ti) {
String result = a + " += " + F(b,c,d) + " + x" + x + " + " + Ti + ";";
result += "\n";
result += a + " = " + b + " + " + rotateLeft(a,s) + ";";
System.out.println(result);
return result;
}
public static String pGG(String a,String b,String c,String d,int x, int s, String Ti) {
String result = a + " += " + G(b,c,d) + " + x" + x + " + " + Ti + ";";
result += "\n";
result += a + " = " + b + " + " + rotateLeft(a,s) + ";";
System.out.println(result);
return result;
}
public static String pHH(String a,String b,String c,String d,int x, int s, String Ti) {
String result = a + " += " + H(b,c,d) + " + x" + x + " + " + Ti + ";";
result += "\n";
result += a + " = " + b + " + " + rotateLeft(a,s) + ";";
System.out.println(result);
return result;
}
public static String pII(String a,String b,String c,String d,int x, int s, String Ti) {
String result = a + " += " + I(b,c,d) + " + x" + x + " + " + Ti + ";";
result += "\n";
result += a + " = " + b + " + " + rotateLeft(a,s) + ";";
System.out.println(result);
return result;
}
}