in dbus-java/src/main/java/org/freedesktop/dbus/connections/SASL.java [249:293]
public SaslResult doChallenge(int _auth, SASL.Command c) throws IOException {
switch (_auth) {
case AUTH_SHA:
String[] reply = stupidlyDecode(c.getData()).split(" ");
logger.trace(Arrays.toString(reply));
if (3 != reply.length) {
logger.debug("Reply is not length 3");
return SaslResult.ERROR;
}
String context = reply[0];
String id = reply[1];
String serverchallenge = reply[2];
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException nsae) {
logger.debug("", nsae);
return SaslResult.ERROR;
}
byte[] buf = new byte[8];
Message.marshallintBig(System.currentTimeMillis(), buf, 0, 8);
String clientchallenge = stupidlyEncode(md.digest(buf));
md.reset();
long start = System.currentTimeMillis();
String lCookie = null;
while (null == lCookie && (System.currentTimeMillis() - start) < LOCK_TIMEOUT) {
lCookie = findCookie(context, id);
}
if (null == lCookie) {
logger.debug("Did not find a cookie in context {} with ID {}",context, id);
return SaslResult.ERROR;
}
String response = serverchallenge + ":" + clientchallenge + ":" + lCookie;
buf = md.digest(response.getBytes());
logger.trace("Response: {} hash: {}", response, Hexdump.format(buf));
response = stupidlyEncode(buf);
c.setResponse(stupidlyEncode(clientchallenge + " " + response));
return SaslResult.OK;
default:
logger.debug("Not DBUS_COOKIE_SHA1 authtype.");
return SaslResult.ERROR;
}
}