diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-20 14:40:12 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-20 14:40:12 +0000 |
| commit | c3a6b2c40144785fcd1a1d975b457d1d41e7cdc7 (patch) | |
| tree | 97c2ae90999b7b248684bf60b4bad49d5ac3afc2 /src/QXmppStream.cpp | |
| parent | 89aa32bb1aaee3d8fdc1e767eff7ad0907817c2a (diff) | |
| download | qxmpp-c3a6b2c40144785fcd1a1d975b457d1d41e7cdc7.tar.gz | |
use calculateDigestMd5
Diffstat (limited to 'src/QXmppStream.cpp')
| -rw-r--r-- | src/QXmppStream.cpp | 41 |
1 files changed, 13 insertions, 28 deletions
diff --git a/src/QXmppStream.cpp b/src/QXmppStream.cpp index d193f7af..dd76d2fc 100644 --- a/src/QXmppStream.cpp +++ b/src/QXmppStream.cpp @@ -837,39 +837,24 @@ void QXmppStream::sendAuthDigestMD5ResponseStep1(const QString& challenge) return; } - QByteArray user = configuration().user().toUtf8(); - QByteArray passwd = configuration().passwd().toUtf8(); - QByteArray domain = configuration().domain().toUtf8(); - QByteArray realm; - if(map.contains("realm")) - realm = map["realm"]; - + const QByteArray user = configuration().user().toUtf8(); + const QByteArray passwd = configuration().passwd().toUtf8(); + const QByteArray domain = configuration().domain().toUtf8(); + const QByteArray realm = map.value("realm"); QByteArray cnonce(32, 'm'); for(int n = 0; n < cnonce.size(); ++n) - cnonce[n] = (char)(256.0*qrand()/(RAND_MAX+1.0)); + cnonce[n] = (char)(256.0*qrand()/(RAND_MAX+1.0)); // The random data can the '=' char is not valid as it is a delimiter, // so to be safe, base64 the nonce cnonce = cnonce.toBase64(); - QByteArray nc = "00000001"; - QByteArray digest_uri = "xmpp/" + domain; - - QByteArray a1 = user + ':' + realm + ':' + passwd; - QByteArray ha1 = QCryptographicHash::hash(a1, QCryptographicHash::Md5); - ha1 += ':' + map["nonce"] + ':' + cnonce; - - if(map.contains("authzid")) - ha1 += ':' + map["authzid"]; - - QByteArray A1(ha1); - QByteArray A2 = "AUTHENTICATE:" + digest_uri; - QByteArray HA1 = QCryptographicHash::hash(A1, QCryptographicHash::Md5).toHex(); - QByteArray HA2 = QCryptographicHash::hash(A2, QCryptographicHash::Md5).toHex(); - QByteArray KD = HA1 + ':' + map["nonce"] + ':' + nc + ':' + cnonce + ':' - + "auth" + ':' + HA2; - QByteArray Z = QCryptographicHash::hash(KD, QCryptographicHash::Md5).toHex(); + const QByteArray nc = "00000001"; + const QByteArray digest_uri = "xmpp/" + domain; + const QByteArray authzid = map.value("authzid"); + const QByteArray nonce = map.value("nonce"); + const QByteArray a1 = user + ':' + realm + ':' + passwd; // Build response QMap<QByteArray, QByteArray> response; @@ -881,9 +866,9 @@ void QXmppStream::sendAuthDigestMD5ResponseStep1(const QString& challenge) response["nc"] = nc; response["qop"] = "auth"; response["digest-uri"] = digest_uri; - response["response"] = Z; - if(map.contains("authzid")) - response["authzid"] = map["authzid"]; + response["response"] = calculateDigestMd5(a1, nonce, nc, cnonce, digest_uri, authzid); + if(!authzid.isEmpty()) + response["authzid"] = authzid; response["charset"] = "utf-8"; const QByteArray data = serializeDigestMd5(response); |
