aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-20 14:28:58 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-20 14:28:58 +0000
commit89aa32bb1aaee3d8fdc1e767eff7ad0907817c2a (patch)
tree04bf6e5442504b27a6d38d42781023591aaaceb3 /src
parent01b9f5be8eaaf368cb0368740c52b1fb8707cca9 (diff)
downloadqxmpp-89aa32bb1aaee3d8fdc1e767eff7ad0907817c2a.tar.gz
add a method to calculate a Digest MD5
Diffstat (limited to 'src')
-rw-r--r--src/QXmppUtils.cpp19
-rw-r--r--src/QXmppUtils.h3
2 files changed, 22 insertions, 0 deletions
diff --git a/src/QXmppUtils.cpp b/src/QXmppUtils.cpp
index a6e6de74..d05851db 100644
--- a/src/QXmppUtils.cpp
+++ b/src/QXmppUtils.cpp
@@ -286,6 +286,25 @@ QString unescapeString(const QString& str)
return strOut;
}
+QByteArray calculateDigestMd5(const QByteArray &a1,
+ const QByteArray &nonce, const QByteArray &nc, const QByteArray &cnonce,
+ const QByteArray &digest_uri, const QByteArray &authzid)
+{
+ QByteArray ha1 = QCryptographicHash::hash(a1, QCryptographicHash::Md5);
+ ha1 += ':' + nonce + ':' + cnonce;
+
+ if (!authzid.isEmpty())
+ ha1 += ':' + 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 + ':' + nonce + ':' + nc + ':' + cnonce + ':'
+ + "auth" + ':' + HA2;
+ return QCryptographicHash::hash(KD, QCryptographicHash::Md5).toHex();
+}
+
QMap<QByteArray, QByteArray> parseDigestMd5(const QByteArray &ba)
{
QMap<QByteArray, QByteArray> map;
diff --git a/src/QXmppUtils.h b/src/QXmppUtils.h
index 4fc9d9c7..3b3326b9 100644
--- a/src/QXmppUtils.h
+++ b/src/QXmppUtils.h
@@ -65,6 +65,9 @@ QString escapeString(const QString& str);
QString unescapeString(const QString& str);
// Digest MD5 authentication
+QByteArray calculateDigestMd5(const QByteArray &a1,
+ const QByteArray &nonce, const QByteArray &nc, const QByteArray &cnonce,
+ const QByteArray &digest_uri, const QByteArray &authzid);
QMap<QByteArray, QByteArray> parseDigestMd5(const QByteArray &ba);
QByteArray serializeDigestMd5(const QMap<QByteArray, QByteArray> &map);