package com.ngpos.arch.util;
import com.ngpos.arch.util.types.FileHelper;
import com.ngpos.arch.util.utf.UTF8Converter;
import java.io.File;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
public class Digest {
public static void main(String[] paramArrayOfString) throws IOException {
if (paramArrayOfString.length == 0) {
generateByPlainFile();
} else {
String str = generateLine(paramArrayOfString);
System.out.println(str);
}
}
private static void generateByPlainFile() throws IOException {
String str1 = "\\tmp\\security\\";
String str2 = "security.data";
File file = new File(str1 + "operators.txt");
if (file.exists()) {
(new File(str1 + str2)).delete();
System.out.println("Generating security data file, based on '" + file.getAbsolutePath() + "'...\n");
List list = FileHelper.readAsList(file);
HashSet hashSet = new HashSet();
byte b = 1;
for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {
StringTokenizer stringTokenizer = new StringTokenizer(iterator.next(), ",");
if (stringTokenizer.countTokens() == 3) {
String str3 = (String)stringTokenizer.nextElement();
String str4 = (String)stringTokenizer.nextElement();
String str5 = ((String)stringTokenizer.nextElement()).trim();
String str6 = (str4.length() >= 3) ? str4.substring(str4.length() - 3) : str4;
if (hashSet.contains(str6)) {
System.out.println("Line # " + b + " : Password '" + str6 + "' for user '" + str5 + "' alread exists !");
System.exit(1);
} else {
hashSet.add(str6);
}
String str7 = generateLine(new String[] { str4, str5, str3, "99991231", str6 });
FileHelper.append(str1 + str2, str7);
System.out.println("Added: '" + str7 + "'");
} else {
System.out.println("Line # " + b + " : Invalid number of tokens !");
System.exit(1);
}
b++;
}
System.out.println("\nAdded '" + list.size() + "' user(s) into the security.data file.");
} else {
System.out.println("Couldn't find source file '" + file.getAbsolutePath() + file.getName() + "'");
System.exit(1);
}
}
public static String generateLine(String[] paramArrayOfString) {
if (paramArrayOfString.length != 5) {
System.out.println("Usage: Digest [UserId UserName Level Expiration Passwd]");
System.exit(0);
}
String str = generatePassword(UTF8Converter.stringToUTF8(paramArrayOfString[0]), UTF8Converter.stringToUTF8(paramArrayOfString[4]));
StringBuffer stringBuffer = new StringBuffer();
if (str != null) {
stringBuffer.append(paramArrayOfString[0]);
stringBuffer.append(",");
stringBuffer.append(paramArrayOfString[1]);
stringBuffer.append(",");
stringBuffer.append(paramArrayOfString[2]);
stringBuffer.append(",");
stringBuffer.append(paramArrayOfString[3]);
stringBuffer.append(",");
stringBuffer.append(str);
stringBuffer.append(",");
stringBuffer.append(generateMD5(stringBuffer.toString()));
}
return stringBuffer.toString();
}
private static String generateMD5(String paramString) {
String str;
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(UTF8Converter.stringToUTF8(paramString));
byte[] arrayOfByte = messageDigest.digest();
str = getOutput(arrayOfByte);
} catch (NoSuchAlgorithmException noSuchAlgorithmException) {
str = null;
}
return str;
}
private static String generatePassword(byte[] paramArrayOfbyte1, byte[] paramArrayOfbyte2) {
String str;
byte[] arrayOfByte1 = new byte[64];
byte[] arrayOfByte2 = new byte[64];
if (paramArrayOfbyte1.length == 0 || paramArrayOfbyte1.length > 64) {
System.out.println("User Id should have length between 1 and 64 bytes");
return null;
}
if (paramArrayOfbyte2.length < 1 || paramArrayOfbyte2.length > 16) {
System.out.println("User password should have length between 1 and 16 bytes");
return null;
}
byte b;
for (b = 0; b < paramArrayOfbyte2.length; b++) {
arrayOfByte1[b] = paramArrayOfbyte2[b];
arrayOfByte2[b] = paramArrayOfbyte2[b];
}
for (b = 0; b < 64; b++) {
arrayOfByte1[b] = (byte)(arrayOfByte1[b] ^ 0x36);
arrayOfByte2[b] = (byte)(arrayOfByte2[b] ^ 0x5C);
}
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(arrayOfByte1);
messageDigest.update(paramArrayOfbyte1);
byte[] arrayOfByte = messageDigest.digest();
messageDigest.reset();
messageDigest.update(arrayOfByte2);
messageDigest.update(arrayOfByte);
arrayOfByte = messageDigest.digest();
str = getOutput(arrayOfByte);
} catch (NoSuchAlgorithmException noSuchAlgorithmException) {
str = null;
}
return str;
}
private static String getOutput(byte[] paramArrayOfbyte) {
StringBuffer stringBuffer = new StringBuffer();
for (byte b = 0; b < paramArrayOfbyte.length; b++)
stringBuffer.append(Integer.toHexString(0xFF & paramArrayOfbyte[b]));
return stringBuffer.toString();
}
}