/* Copyright 2015 Sandro Knauß This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License or (at your option) version 3 or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of version 3 of the license. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "cryptohelpertest.h" #include "cryptohelper.h" #include using namespace MimeTreeParser; void CryptoHelperTest::testPMFDEmpty() { QCOMPARE(prepareMessageForDecryption("").count(), 0); } void CryptoHelperTest::testPMFDWithNoPGPBlock() { const QByteArray text = "testblabla"; const QList blocks = prepareMessageForDecryption(text); QCOMPARE(blocks.count(), 1); QCOMPARE(blocks[0].text(), text); QCOMPARE(blocks[0].type(), NoPgpBlock); } void CryptoHelperTest::testPGPBlockType() { const QString blockText = QStringLiteral("text"); const QString preString = QStringLiteral("before\n"); for (int i = 1; i <= PrivateKeyBlock; ++i) { QString name; switch (i) { case PgpMessageBlock: name = QStringLiteral("MESSAGE"); break; case MultiPgpMessageBlock: name = QStringLiteral("MESSAGE PART"); break; case SignatureBlock: name = QStringLiteral("SIGNATURE"); break; case ClearsignedBlock: name = QStringLiteral("SIGNED MESSAGE"); break; case PublicKeyBlock: name = QStringLiteral("PUBLIC KEY BLOCK"); break; case PrivateKeyBlock: name = QStringLiteral("PRIVATE KEY BLOCK"); break; } QString text = QLatin1String("-----BEGIN PGP ") + name + QLatin1String("\n") + blockText; QList blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1()); QCOMPARE(blocks.count(), 1); QCOMPARE(blocks[0].type(), UnknownBlock); text += QLatin1String("\n-----END PGP ") + name + QLatin1String("\n"); blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1()); QCOMPARE(blocks.count(), 2); QCOMPARE(blocks[1].text(), text.toLatin1()); QCOMPARE(blocks[1].type(), static_cast(i)); } } void CryptoHelperTest::testDeterminePGPBlockType() { const QString blockText = QStringLiteral("text"); for (int i = 1; i <= PrivateKeyBlock; ++i) { QString name; switch (i) { case PgpMessageBlock: name = QStringLiteral("MESSAGE"); break; case MultiPgpMessageBlock: name = QStringLiteral("MESSAGE PART"); break; case SignatureBlock: name = QStringLiteral("SIGNATURE"); break; case ClearsignedBlock: name = QStringLiteral("SIGNED MESSAGE"); break; case PublicKeyBlock: name = QStringLiteral("PUBLIC KEY BLOCK"); break; case PrivateKeyBlock: name = QStringLiteral("PRIVATE KEY BLOCK"); break; } const QString text = QLatin1String("-----BEGIN PGP ") + name + QLatin1String("\n") + blockText + QLatin1String("\n"); const Block block = Block(text.toLatin1()); QCOMPARE(block.text(), text.toLatin1()); QCOMPARE(block.type(), static_cast(i)); } } void CryptoHelperTest::testEmbededPGPBlock() { const QByteArray text = QByteArray("before\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\nafter"); const QList blocks = prepareMessageForDecryption(text); QCOMPARE(blocks.count(), 3); QCOMPARE(blocks[0].text(), QByteArray("before\n")); QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n")); QCOMPARE(blocks[2].text(), QByteArray("after")); } void CryptoHelperTest::testClearSignedMessage() { const QByteArray text = QByteArray("before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\nafter"); const QList blocks = prepareMessageForDecryption(text); QCOMPARE(blocks.count(), 3); QCOMPARE(blocks[0].text(), QByteArray("before\n")); QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n")); QCOMPARE(blocks[2].text(), QByteArray("after")); } void CryptoHelperTest::testMultipleBlockMessage() { const QByteArray text = QByteArray("before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\nafter\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n"); const QList blocks = prepareMessageForDecryption(text); QCOMPARE(blocks.count(), 4); QCOMPARE(blocks[0].text(), QByteArray("before\n")); QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n")); QCOMPARE(blocks[2].text(), QByteArray("after\n")); QCOMPARE(blocks[3].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n")); } QTEST_APPLESS_MAIN(CryptoHelperTest)