in client/src/main/java/org/apache/ahc/auth/NTLM.java [315:404]
public String getType3Message(String user, String password,
String host, String domain, byte[] nonce)
throws AuthenticationException {
int ntRespLen = 0;
int lmRespLen = 24;
domain = domain.toUpperCase();
host = host.toUpperCase();
user = user.toUpperCase();
byte[] domainBytes = EncodingUtil.getBytes(domain, DEFAULT_CHARSET);
byte[] hostBytes = EncodingUtil.getBytes(host, DEFAULT_CHARSET);
byte[] userBytes = EncodingUtil.getBytes(user, credentialCharset);
int domainLen = domainBytes.length;
int hostLen = hostBytes.length;
int userLen = userBytes.length;
int finalLength = 64 + ntRespLen + lmRespLen + domainLen
+ userLen + hostLen;
prepareResponse(finalLength);
byte[] ntlmssp = EncodingUtil.getBytes("NTLMSSP", DEFAULT_CHARSET);
addBytes(ntlmssp);
addByte((byte) 0);
addByte((byte) 3);
addByte((byte) 0);
addByte((byte) 0);
addByte((byte) 0);
// LM Resp Length (twice)
addBytes(convertShort(24));
addBytes(convertShort(24));
// LM Resp Offset
addBytes(convertShort(finalLength - 24));
addByte((byte) 0);
addByte((byte) 0);
// NT Resp Length (twice)
addBytes(convertShort(0));
addBytes(convertShort(0));
// NT Resp Offset
addBytes(convertShort(finalLength));
addByte((byte) 0);
addByte((byte) 0);
// Domain length (twice)
addBytes(convertShort(domainLen));
addBytes(convertShort(domainLen));
// Domain offset.
addBytes(convertShort(64));
addByte((byte) 0);
addByte((byte) 0);
// User Length (twice)
addBytes(convertShort(userLen));
addBytes(convertShort(userLen));
// User offset
addBytes(convertShort(64 + domainLen));
addByte((byte) 0);
addByte((byte) 0);
// Host length (twice)
addBytes(convertShort(hostLen));
addBytes(convertShort(hostLen));
// Host offset
addBytes(convertShort(64 + domainLen + userLen));
for (int i = 0; i < 6; i++) {
addByte((byte) 0);
}
// Message length
addBytes(convertShort(finalLength));
addByte((byte) 0);
addByte((byte) 0);
// Flags
addByte((byte) 6);
addByte((byte) 82);
addByte((byte) 0);
addByte((byte) 0);
addBytes(domainBytes);
addBytes(userBytes);
addBytes(hostBytes);
addBytes(hashPassword(password, nonce));
return getResponse();
}