aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2019-01-17 00:23:27 +0100
committerJeremy Lainé <jeremy.laine@m4x.org>2019-01-17 20:35:09 +0100
commitbce9ca477709ae0876e7b7682034f49cdd010f27 (patch)
tree114591927851493247dd93bdbf0c94510b8adebf /tests
parente52030614d935dfb044b0e3fc57a30d812d626f3 (diff)
downloadqxmpp-bce9ca477709ae0876e7b7682034f49cdd010f27.tar.gz
[sasl] add support for SCRAM-SHA-1 and SCRAM-SHA-256
Diffstat (limited to 'tests')
-rw-r--r--tests/qxmppsasl/tst_qxmppsasl.cpp93
1 files changed, 92 insertions, 1 deletions
diff --git a/tests/qxmppsasl/tst_qxmppsasl.cpp b/tests/qxmppsasl/tst_qxmppsasl.cpp
index 3beabf00..4d5bc5dd 100644
--- a/tests/qxmppsasl/tst_qxmppsasl.cpp
+++ b/tests/qxmppsasl/tst_qxmppsasl.cpp
@@ -49,6 +49,9 @@ private slots:
void testClientFacebook();
void testClientGoogle();
void testClientPlain();
+ void testClientScramSha1();
+ void testClientScramSha1_bad();
+ void testClientScramSha256();
void testClientWindowsLive();
// server
@@ -186,7 +189,7 @@ void tst_QXmppSasl::testSuccess()
void tst_QXmppSasl::testClientAvailableMechanisms()
{
- QCOMPARE(QXmppSaslClient::availableMechanisms(), QStringList() << "PLAIN" << "DIGEST-MD5" << "ANONYMOUS" << "X-FACEBOOK-PLATFORM" << "X-MESSENGER-OAUTH2" << "X-OAUTH2");
+ QCOMPARE(QXmppSaslClient::availableMechanisms(), QStringList() << "PLAIN" << "DIGEST-MD5" << "ANONYMOUS" << "SCRAM-SHA-1" << "SCRAM-SHA-256" << "X-FACEBOOK-PLATFORM" << "X-MESSENGER-OAUTH2" << "X-OAUTH2");
}
void tst_QXmppSasl::testClientBadMechanism()
@@ -316,6 +319,94 @@ void tst_QXmppSasl::testClientPlain()
delete client;
}
+void tst_QXmppSasl::testClientScramSha1()
+{
+ QXmppSaslDigestMd5::setNonce("fyko+d2lbbFgONRv9qkxdawL");
+
+ QXmppSaslClient *client = QXmppSaslClient::create("SCRAM-SHA-1");
+ QVERIFY(client != 0);
+ QCOMPARE(client->mechanism(), QLatin1String("SCRAM-SHA-1"));
+
+ client->setUsername("user");
+ client->setPassword("pencil");
+
+ // first step
+ QByteArray response;
+ QVERIFY(client->respond(QByteArray(), response));
+ QCOMPARE(response, QByteArray("n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL"));
+
+ // second step
+ QVERIFY(client->respond(QByteArray("r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096"), response));
+ QCOMPARE(response, QByteArray("c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts="));
+
+ // third step
+ QVERIFY(client->respond(QByteArray("v=rmF9pqV8S7suAoZWja4dJRkFsKQ"), response));
+ QCOMPARE(response, QByteArray());
+
+ // any further step is an error
+ QVERIFY(!client->respond(QByteArray(), response));
+
+ delete client;
+}
+
+void tst_QXmppSasl::testClientScramSha1_bad()
+{
+ QXmppSaslDigestMd5::setNonce("fyko+d2lbbFgONRv9qkxdawL");
+
+ QXmppSaslClient *client = QXmppSaslClient::create("SCRAM-SHA-1");
+ QVERIFY(client != 0);
+ QCOMPARE(client->mechanism(), QLatin1String("SCRAM-SHA-1"));
+
+ client->setUsername("user");
+ client->setPassword("pencil");
+
+ // first step
+ QByteArray response;
+ QVERIFY(client->respond(QByteArray(), response));
+ QCOMPARE(response, QByteArray("n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL"));
+
+ // no nonce
+ QVERIFY(!client->respond(QByteArray("s=QSXCR+Q6sek8bf92,i=4096"), response));
+
+ // no salt
+ QVERIFY(!client->respond(QByteArray("r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,i=4096"), response));
+
+ // no iterations
+ QVERIFY(!client->respond(QByteArray("r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92"), response));
+
+ delete client;
+}
+
+void tst_QXmppSasl::testClientScramSha256()
+{
+ QXmppSaslDigestMd5::setNonce("rOprNGfwEbeRWgbNEkqO");
+
+ QXmppSaslClient *client = QXmppSaslClient::create("SCRAM-SHA-256");
+ QVERIFY(client != 0);
+ QCOMPARE(client->mechanism(), QLatin1String("SCRAM-SHA-256"));
+
+ client->setUsername("user");
+ client->setPassword("pencil");
+
+ // first step
+ QByteArray response;
+ QVERIFY(client->respond(QByteArray(), response));
+ QCOMPARE(response, QByteArray("n,,n=user,r=rOprNGfwEbeRWgbNEkqO"));
+
+ // second step
+ QVERIFY(client->respond(QByteArray("r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096"), response));
+ QCOMPARE(response, QByteArray("c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ="));
+
+ // third step
+ QVERIFY(client->respond(QByteArray("v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4="), response));
+ QCOMPARE(response, QByteArray());
+
+ // any further step is an error
+ QVERIFY(!client->respond(QByteArray(), response));
+
+ delete client;
+}
+
void tst_QXmppSasl::testClientWindowsLive()
{
QXmppSaslClient *client = QXmppSaslClient::create("X-MESSENGER-OAUTH2");