package org.cups; /** * @version 1.00 06-NOV-2003 * @author Easy Software Products * * Internet Printing Protocol definitions for the Common UNIX Printing * System (CUPS). * * Copyright 1997-2003 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3111 USA * * Voice: (301) 373-9603 * EMail: cups-info@cups.org * WWW: http://www.cups.org */ /** * Digest MD5 password routines. * * @author TDB * @version 1.0 * @since JDK1.3 */ 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'}; /** * Constructor is private so you must use the getInstance method */ private IPPMD5() throws NoSuchAlgorithmException { md = MessageDigest.getInstance("MD5"); } /** * This returns the singleton instance */ 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; // MSB maps to idx 0 for (i = 0; i < b.length; i++) { msb = ((int)b[i] & 0x000000FF) / 16; lsb = ((int)b[i] & 0x000000FF) % 16; // System.out.println("I: " + i + " B: " + b[i] + " MSB: " + // msb + " LSB: " + lsb ); 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(""); } }