File indexing completed on 2025-03-09 04:54:27
0001 /* 0002 SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "dkiminfotest.h" 0008 #include "dkim-verify/dkiminfo.h" 0009 #include <QDebug> 0010 #include <QTest> 0011 0012 QTEST_GUILESS_MAIN(DKIMInfoTest) 0013 0014 DKIMInfoTest::DKIMInfoTest(QObject *parent) 0015 : QObject(parent) 0016 { 0017 } 0018 0019 void DKIMInfoTest::shouldHaveDefaultValue() 0020 { 0021 MessageViewer::DKIMInfo info; 0022 QCOMPARE(info.version(), -1); 0023 0024 QCOMPARE(info.hashingAlgorithm(), MessageViewer::DKIMInfo::HashingAlgorithmType::Any); 0025 QVERIFY(info.signingAlgorithm().isEmpty()); 0026 QVERIFY(info.domain().isEmpty()); 0027 QVERIFY(info.selector().isEmpty()); 0028 QVERIFY(info.bodyHash().isEmpty()); 0029 QVERIFY(info.listSignedHeader().isEmpty()); 0030 QVERIFY(info.query().isEmpty()); 0031 QCOMPARE(info.signatureTimeStamp(), -1); 0032 QCOMPARE(info.expireTime(), -1); 0033 QVERIFY(info.signature().isEmpty()); 0034 QVERIFY(info.agentOrUserIdentifier().isEmpty()); 0035 QCOMPARE(info.bodyLengthCount(), -1); 0036 QCOMPARE(info.headerCanonization(), MessageViewer::DKIMInfo::Unknown); 0037 QCOMPARE(info.bodyCanonization(), MessageViewer::DKIMInfo::Unknown); 0038 QVERIFY(info.copiedHeaderField().isEmpty()); 0039 QVERIFY(info.iDomain().isEmpty()); 0040 } 0041 0042 void DKIMInfoTest::shouldTestExtractDkimInfo_data() 0043 { 0044 QTest::addColumn<QString>("dkimstr"); 0045 QTest::addColumn<MessageViewer::DKIMInfo>("dkiminforesult"); 0046 QTest::addColumn<bool>("isValid"); 0047 QTest::addRow("empty") << QString() << MessageViewer::DKIMInfo() << false; 0048 QString val = QStringLiteral( 0049 "a=rsa-sha1; q=dns; d=example.com; i=user@eng.example.com; s=jun2005.eng; c=relaxed/simple; t=1117574938; x=1118006938; h=from:to:subject:date; " 0050 "b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR"); 0051 MessageViewer::DKIMInfo info1; 0052 info1.setVersion(1); 0053 info1.setQuery(QStringLiteral("dns")); 0054 info1.setDomain(QStringLiteral("example.com")); 0055 info1.setSigningAlgorithm(QStringLiteral("rsa")); 0056 info1.setHashingAlgorithm(MessageViewer::DKIMInfo::HashingAlgorithmType::Sha1); 0057 info1.setBodyCanonization(MessageViewer::DKIMInfo::Simple); 0058 info1.setHeaderCanonization(MessageViewer::DKIMInfo::Relaxed); 0059 info1.setSignatureTimeStamp(1117574938); 0060 info1.setExpireTime(1118006938); 0061 info1.setSelector(QStringLiteral("jun2005.eng")); 0062 info1.setAgentOrUserIdentifier(QStringLiteral("user@eng.example.com")); 0063 info1.setIDomain(QStringLiteral("eng.example.com")); 0064 info1.setSignature(QStringLiteral("dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR")); 0065 info1.setListSignedHeader(QStringList({QStringLiteral("from"), QStringLiteral("to"), QStringLiteral("subject"), QStringLiteral("date")})); 0066 QTest::addRow("test1") << val << info1 << true; 0067 0068 val = QStringLiteral( 0069 "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; " 0070 "h=message-id:content-type:content-type:user-agent:content-disposition:content-transfer-encoding:mime-version:reply-to:references:in-reply-to:subject:" 0071 "subject" 0072 ":list-unsubscribe:list-id:from:from:date:date; s=dkim; t=1569945303; x=1570809304; bh=/TC3U+LlxLH3YGxhC7qIHK8PzGl6Zx/8P6OGhDWrcWs=; " 0073 "b=w4GIjJb/+yEZvzvlw9yIPiuk/eKxAGSKL4WNmgC4D3V9fNyuVOV" 0074 "IH06PzqCuU/NwLas3SdAvd3VbTCObAb38KXeXkO7meeyCoR+kDsFzHpSAUg7+IRkeDR+RmarFjXwZAtoX3OMsB8euEprhS9fgGupxCWxwu6VGKJgt3Yu3/cI="); 0075 MessageViewer::DKIMInfo info2; 0076 info2.setVersion(1); 0077 info2.setQuery(QStringLiteral("dns/txt")); 0078 info2.setDomain(QStringLiteral("example.com")); 0079 info2.setIDomain(QStringLiteral("example.com")); 0080 info2.setAgentOrUserIdentifier(QStringLiteral("@example.com")); 0081 info2.setSigningAlgorithm(QStringLiteral("rsa")); 0082 info2.setHashingAlgorithm(MessageViewer::DKIMInfo::HashingAlgorithmType::Sha256); 0083 info2.setBodyCanonization(MessageViewer::DKIMInfo::Relaxed); 0084 info2.setHeaderCanonization(MessageViewer::DKIMInfo::Relaxed); 0085 info2.setSignatureTimeStamp(1569945303); 0086 info2.setExpireTime(1570809304); 0087 info2.setSelector(QStringLiteral("dkim")); 0088 info2.setSignature( 0089 QStringLiteral("w4GIjJb/+yEZvzvlw9yIPiuk/eKxAGSKL4WNmgC4D3V9fNyuVOVIH06PzqCuU/" 0090 "NwLas3SdAvd3VbTCObAb38KXeXkO7meeyCoR+kDsFzHpSAUg7+IRkeDR+RmarFjXwZAtoX3OMsB8euEprhS9fgGupxCWxwu6VGKJgt3Yu3/cI=")); 0091 info2.setBodyHash(QStringLiteral("/TC3U+LlxLH3YGxhC7qIHK8PzGl6Zx/8P6OGhDWrcWs=")); 0092 info2.setListSignedHeader(QStringList({QStringLiteral("message-id"), 0093 QStringLiteral("content-type"), 0094 QStringLiteral("content-type"), 0095 QStringLiteral("user-agent"), 0096 QStringLiteral("content-disposition"), 0097 QStringLiteral("content-transfer-encoding"), 0098 QStringLiteral("mime-version"), 0099 QStringLiteral("reply-to"), 0100 QStringLiteral("references"), 0101 QStringLiteral("in-reply-to"), 0102 QStringLiteral("subject"), 0103 QStringLiteral("subject"), 0104 QStringLiteral("list-unsubscribe"), 0105 QStringLiteral("list-id"), 0106 QStringLiteral("from"), 0107 QStringLiteral("from"), 0108 QStringLiteral("date"), 0109 QStringLiteral("date")})); 0110 QTest::addRow("test2") << val << info2 << true; 0111 0112 val = QStringLiteral( 0113 "v=1; a=rsa-sha1; c=relaxed; d=abonnement.radins.com; " 0114 "h=message-id:list-unsubscribe:from:to:reply-to:content-type:subject:content-transfer-encoding:mime-version:date; s=selector1; " 0115 "bh=vyAg5eFfq019WlDt9csu4bJMC54=; " 0116 "b=ABKgPqPe/MOGdgR2TJuiVNTLugsL8q/+ky/JxOxwZxnsPbtFnyJ+Y7Gk8bfcBL9myKPNqe7bU6Uy4IiNptn+v34rhVApm6ccoc44UXe/2A5D+6CPJHjFyf/ggjgF/" 0117 "BtQGYoMeQwj2+F4+QRxHSPldAcWqLCwlcRN25nPgiSAvWg="); 0118 MessageViewer::DKIMInfo info3; 0119 info3.setVersion(1); 0120 info3.setQuery(QStringLiteral("dns/txt")); 0121 info3.setDomain(QStringLiteral("abonnement.radins.com")); 0122 info3.setIDomain(QStringLiteral("abonnement.radins.com")); 0123 info3.setAgentOrUserIdentifier(QStringLiteral("@abonnement.radins.com")); 0124 info3.setSigningAlgorithm(QStringLiteral("rsa")); 0125 info3.setHashingAlgorithm(MessageViewer::DKIMInfo::HashingAlgorithmType::Sha1); 0126 info3.setBodyCanonization(MessageViewer::DKIMInfo::Simple); 0127 info3.setHeaderCanonization(MessageViewer::DKIMInfo::Relaxed); 0128 info3.setSelector(QStringLiteral("selector1")); 0129 info3.setSignature( 0130 QStringLiteral("ABKgPqPe/MOGdgR2TJuiVNTLugsL8q/+ky/JxOxwZxnsPbtFnyJ+Y7Gk8bfcBL9myKPNqe7bU6Uy4IiNptn+v34rhVApm6ccoc44UXe/2A5D+6CPJHjFyf/ggjgF/" 0131 "BtQGYoMeQwj2+F4+QRxHSPldAcWqLCwlcRN25nPgiSAvWg=")); 0132 info3.setBodyHash(QStringLiteral("vyAg5eFfq019WlDt9csu4bJMC54=")); 0133 info3.setListSignedHeader(QStringList({QStringLiteral("message-id"), 0134 QStringLiteral("list-unsubscribe"), 0135 QStringLiteral("from"), 0136 QStringLiteral("to"), 0137 QStringLiteral("reply-to"), 0138 QStringLiteral("content-type"), 0139 QStringLiteral("subject"), 0140 QStringLiteral("content-transfer-encoding"), 0141 QStringLiteral("mime-version"), 0142 QStringLiteral("date")})); 0143 QTest::addRow("test3") << val << info3 << true; 0144 } 0145 0146 void DKIMInfoTest::shouldTestExtractDkimInfo() 0147 { 0148 QFETCH(QString, dkimstr); 0149 QFETCH(MessageViewer::DKIMInfo, dkiminforesult); 0150 QFETCH(bool, isValid); 0151 MessageViewer::DKIMInfo info; 0152 QCOMPARE(info.parseDKIM(dkimstr), isValid); 0153 if (isValid) { 0154 const bool isEqual = (info == dkiminforesult); 0155 if (!isEqual) { 0156 qDebug() << " info" << info; 0157 qDebug() << " dkiminforesult" << dkiminforesult; 0158 } 0159 QVERIFY(isEqual); 0160 } 0161 } 0162 0163 #include "moc_dkiminfotest.cpp"