protected string authenticate(string nonce)
{
string NC = "00000001";
string qop = "auth";
string cnonce = Func.random_uuid();
string data1 = this.phoneNumber;
data1 += ":";
data1 += WhatsConstants.WhatsAppServer;
data1 += ":";
data1 += this.encryptPassword(); //this.EncryptPassword();
string data2 = Func.HexString2Ascii(md5(data1));
data2 += ":";
data2 += nonce;
data2 += ":";
data2 += cnonce;
string data3 = "AUTHENTICATE:";
data3 += WhatsConstants.WhatsAppDigest;
string data4 = md5(data2);
data4 += ":";
data4 += nonce;
data4 += ":";
data4 += NC;
data4 += ":";
data4 += cnonce;
data4 += ":";
data4 += qop;
data4 += ":";
data4 += md5(data3);
string data5 = md5(data4);
string response =
string.Format(
"username=\"{0}\",realm=\"{1}\",nonce=\"{2}\",cnonce=\"{3}\",nc={4},qop={5},digest-uri=\"{6}\",response={7},charset=ISO-8859-1",
this.phoneNumber,
WhatsConstants.WhatsAppRealm,
nonce,
cnonce,
NC,
qop,
WhatsConstants.WhatsAppDigest,
data5);
return response;
}