File indexing completed on 2024-06-02 05:30:20

0001 /* SPDX-FileCopyrightText: 2015 Sandro Knauß <knauss@kolabsys.com>
0002 
0003    SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 #include "cryptohelpertest.h"
0006 
0007 #include "cryptohelper.h"
0008 
0009 #include <QTest>
0010 
0011 using namespace MimeTreeParser;
0012 
0013 void CryptoHelperTest::testPMFDEmpty()
0014 {
0015     QCOMPARE(prepareMessageForDecryption("").count(), 0);
0016 }
0017 
0018 void CryptoHelperTest::testPMFDWithNoPGPBlock()
0019 {
0020     const QByteArray text = "testblabla";
0021     const QList<Block> blocks = prepareMessageForDecryption(text);
0022     QCOMPARE(blocks.count(), 1);
0023     QCOMPARE(blocks[0].text(), text);
0024     QCOMPARE(blocks[0].type(), NoPgpBlock);
0025 }
0026 
0027 void CryptoHelperTest::testPGPBlockType()
0028 {
0029     const QString blockText = QStringLiteral("text");
0030     const QString preString = QStringLiteral("before\n");
0031     for (int i = 1; i <= PrivateKeyBlock; ++i) {
0032         QString name;
0033         switch (i) {
0034         case PgpMessageBlock:
0035             name = QStringLiteral("MESSAGE");
0036             break;
0037         case MultiPgpMessageBlock:
0038             name = QStringLiteral("MESSAGE PART");
0039             break;
0040         case SignatureBlock:
0041             name = QStringLiteral("SIGNATURE");
0042             break;
0043         case ClearsignedBlock:
0044             name = QStringLiteral("SIGNED MESSAGE");
0045             break;
0046         case PublicKeyBlock:
0047             name = QStringLiteral("PUBLIC KEY BLOCK");
0048             break;
0049         case PrivateKeyBlock:
0050             name = QStringLiteral("PRIVATE KEY BLOCK");
0051             break;
0052         }
0053         QString text = QLatin1StringView("-----BEGIN PGP ") + name + QLatin1Char('\n') + blockText;
0054         QList<Block> blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1());
0055         QCOMPARE(blocks.count(), 1);
0056         QCOMPARE(blocks[0].type(), UnknownBlock);
0057 
0058         text += QLatin1StringView("\n-----END PGP ") + name + QLatin1Char('\n');
0059         blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1());
0060         QCOMPARE(blocks.count(), 2);
0061         QCOMPARE(blocks[1].text(), text.toLatin1());
0062         QCOMPARE(blocks[1].type(), static_cast<PGPBlockType>(i));
0063     }
0064 }
0065 
0066 void CryptoHelperTest::testDeterminePGPBlockType()
0067 {
0068     const QString blockText = QStringLiteral("text");
0069     for (int i = 1; i <= PrivateKeyBlock; ++i) {
0070         QString name;
0071         switch (i) {
0072         case PgpMessageBlock:
0073             name = QStringLiteral("MESSAGE");
0074             break;
0075         case MultiPgpMessageBlock:
0076             name = QStringLiteral("MESSAGE PART");
0077             break;
0078         case SignatureBlock:
0079             name = QStringLiteral("SIGNATURE");
0080             break;
0081         case ClearsignedBlock:
0082             name = QStringLiteral("SIGNED MESSAGE");
0083             break;
0084         case PublicKeyBlock:
0085             name = QStringLiteral("PUBLIC KEY BLOCK");
0086             break;
0087         case PrivateKeyBlock:
0088             name = QStringLiteral("PRIVATE KEY BLOCK");
0089             break;
0090         }
0091         const QString text = QLatin1StringView("-----BEGIN PGP ") + name + QLatin1Char('\n') + blockText + QLatin1Char('\n');
0092         const Block block = Block(text.toLatin1());
0093         QCOMPARE(block.text(), text.toLatin1());
0094         QCOMPARE(block.type(), static_cast<PGPBlockType>(i));
0095     }
0096 }
0097 
0098 void CryptoHelperTest::testEmbededPGPBlock()
0099 {
0100     const QByteArray text = QByteArray("before\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\nafter");
0101     const QList<Block> blocks = prepareMessageForDecryption(text);
0102     QCOMPARE(blocks.count(), 3);
0103     QCOMPARE(blocks[0].text(), QByteArray("before\n"));
0104     QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n"));
0105     QCOMPARE(blocks[2].text(), QByteArray("after"));
0106 }
0107 
0108 void CryptoHelperTest::testClearSignedMessage()
0109 {
0110     const QByteArray text = QByteArray(
0111         "before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\nafter");
0112     const QList<Block> blocks = prepareMessageForDecryption(text);
0113     QCOMPARE(blocks.count(), 3);
0114     QCOMPARE(blocks[0].text(), QByteArray("before\n"));
0115     QCOMPARE(blocks[1].text(),
0116              QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n"));
0117     QCOMPARE(blocks[2].text(), QByteArray("after"));
0118 }
0119 
0120 void CryptoHelperTest::testMultipleBlockMessage()
0121 {
0122     const QByteArray text = QByteArray(
0123         "before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP "
0124         "SIGNATURE-----\nafter\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n");
0125     const QList<Block> blocks = prepareMessageForDecryption(text);
0126     QCOMPARE(blocks.count(), 4);
0127     QCOMPARE(blocks[0].text(), QByteArray("before\n"));
0128     QCOMPARE(blocks[1].text(),
0129              QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n"));
0130     QCOMPARE(blocks[2].text(), QByteArray("after\n"));
0131     QCOMPARE(blocks[3].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n"));
0132 }
0133 
0134 QTEST_APPLESS_MAIN(CryptoHelperTest)
0135 
0136 #include "moc_cryptohelpertest.cpp"