package org.openxdm.xcap.server.slee.auth;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import org.apache.commons.httpclient.util.EncodingUtil;
import org.openxdm.xcap.common.error.InternalServerErrorException;
public class RFC2617ChallengeParamGenerator {
public String getNonce(String seed) throws InternalServerErrorException {
if (nonceDigestSecret == null) {
nonceDigestSecret = generateOpaque();
}
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new InternalServerErrorException("failed to get instance of MD5 digest, used in "+RFC2617AuthQopDigest.class.getName());
}
return AsciiHexStringEncoder.encode(messageDigest.digest(EncodingUtil.getAsciiBytes(seed+":"+nonceDigestSecret)));
}
private String nonceDigestSecret;
private final SecureRandom opaqueGenerator = new SecureRandom();
public String generateOpaque() {
synchronized (opaqueGenerator) {
return Integer.toHexString(opaqueGenerator.nextInt());
}
}
}