package org.cups;
import java.security.*;
public class IPPMD5
{
public MessageDigest md = null;
static private IPPMD5 md5 = null;
private static final char[] hexChars = {'0','1','2','3','4','5','6','7',
'8','9','a','b','c','d','e','f'};
private IPPMD5() throws NoSuchAlgorithmException
{
md = MessageDigest.getInstance("MD5");
}
public static IPPMD5 getInstance() throws NoSuchAlgorithmException
{
if (md5 == null)
{
md5 = new IPPMD5();
}
return (md5);
}
public String hashData(byte[] dataToHash)
{
return(hexStringFromBytes((calculateHash(dataToHash))));
}
private byte[] calculateHash(byte[] dataToHash)
{
md.update(dataToHash, 0, dataToHash.length);
return(md.digest());
}
public String hexStringFromBytes(byte[] b)
{
String hex = "";
int msb;
int lsb = 0;
int i;
for (i = 0; i < b.length; i++)
{
msb = ((int)b[i] & 0x000000FF) / 16;
lsb = ((int)b[i] & 0x000000FF) % 16;
hex = hex + hexChars[msb] + hexChars[lsb];
}
return(hex);
}
public String MD5Digest( String user, String passwd, String realm,
String method, String resource, String nonce )
{
String tmp;
String A1, A2;
String auth_string = "";
try
{
tmp = user + ":" + realm + ":" + passwd;
md = MessageDigest.getInstance("MD5");
A1 = hexStringFromBytes(md.digest(tmp.getBytes()));
tmp = method + ":" + resource;
md = MessageDigest.getInstance("MD5");
A2 = hexStringFromBytes(md.digest(tmp.getBytes()));
tmp = A1 + ":" + nonce + ":" + A2;
md = MessageDigest.getInstance("MD5");
auth_string = hexStringFromBytes(md.digest(tmp.getBytes()));
return(auth_string);
}
catch (NoSuchAlgorithmException e)
{
}
return("");
}
}