9 #include "messageviewer_export.h"
10 #include <KMime/Message>
11 #include <MessageViewer/DKIMCheckPolicy>
12 #include <MessageViewer/DKIMHeaderParser>
13 #include <MessageViewer/DKIMInfo>
14 #include <MessageViewer/DKIMKeyRecord>
17 namespace MessageViewer
27 enum class DKIMStatus : int {
36 enum class DKIMError : int {
38 CorruptedBodyHash = 1,
42 InvalidQueryMethod = 5,
43 InvalidHeaderCanonicalization = 6,
44 InvalidBodyCanonicalization = 7,
45 InvalidBodyHashAlgorithm = 8,
46 InvalidSignAlgorithm = 9,
47 PublicKeyWasRevoked = 10,
48 SignatureTooLarge = 11,
49 InsupportedHashAlgorithm = 12,
50 PublicKeyTooSmall = 13,
51 ImpossibleToVerifySignature = 14,
54 ImpossibleToDownloadKey = 17,
55 HashAlgorithmUnsafeSha1 = 18,
57 PublicKeyConversionError = 20,
60 enum class DKIMWarning : int {
63 SignatureCreatedInFuture = 2,
64 SignatureTooSmall = 3,
65 HashAlgorithmUnsafe = 4,
66 PublicRsaKeyTooSmall = 5,
70 enum class AuthenticationMethod : int {
78 Q_ENUM(AuthenticationMethod)
80 struct MESSAGEVIEWER_EXPORT DKIMCheckSignatureAuthenticationResult {
83 AuthenticationMethod method = AuthenticationMethod::Unknown;
84 DKIMCheckSignatureJob::DKIMStatus
status = DKIMCheckSignatureJob::DKIMStatus::Unknown;
87 Q_REQUIRED_RESULT
bool operator==(
const DKIMCheckSignatureAuthenticationResult &other)
const;
88 Q_REQUIRED_RESULT
bool isValid()
const;
91 struct MESSAGEVIEWER_EXPORT CheckSignatureResult {
92 Q_REQUIRED_RESULT
bool isValid()
const;
94 Q_REQUIRED_RESULT
bool operator==(
const CheckSignatureResult &other)
const;
96 Q_REQUIRED_RESULT
bool operator!=(
const CheckSignatureResult &other)
const;
98 DKIMCheckSignatureJob::DKIMError error = DKIMCheckSignatureJob::DKIMError::Any;
99 DKIMCheckSignatureJob::DKIMWarning warning = DKIMCheckSignatureJob::DKIMWarning::Any;
100 DKIMCheckSignatureJob::DKIMStatus
status = DKIMCheckSignatureJob::DKIMStatus::Unknown;
112 Q_REQUIRED_RESULT
QString dkimValue()
const;
114 Q_REQUIRED_RESULT DKIMCheckSignatureJob::DKIMStatus
status()
const;
115 void setStatus(MessageViewer::DKIMCheckSignatureJob::DKIMStatus
status);
117 Q_REQUIRED_RESULT MessageViewer::DKIMCheckSignatureJob::DKIMStatus checkSignature(
const MessageViewer::DKIMInfo &info);
119 Q_REQUIRED_RESULT DKIMCheckSignatureJob::DKIMError error()
const;
124 Q_REQUIRED_RESULT DKIMCheckSignatureJob::DKIMWarning warning()
const;
125 void setWarning(MessageViewer::DKIMCheckSignatureJob::DKIMWarning warning);
127 Q_REQUIRED_RESULT
QString headerCanonizationResult()
const;
129 Q_REQUIRED_RESULT
QString bodyCanonizationResult()
const;
139 void result(
const MessageViewer::DKIMCheckSignatureJob::CheckSignatureResult &checkResult);
143 void downloadKey(
const DKIMInfo &info);
145 void parseDKIMKeyRecord(
const QString &str,
const QString &domain,
const QString &selector,
bool storeKeyValue =
true);
146 Q_REQUIRED_RESULT
QString headerCanonizationSimple()
const;
147 Q_REQUIRED_RESULT
QString headerCanonizationRelaxed(
bool removeQuoteOnContentType)
const;
148 Q_REQUIRED_RESULT
QString bodyCanonizationRelaxed()
const;
149 Q_REQUIRED_RESULT
QString bodyCanonizationSimple()
const;
150 Q_REQUIRED_RESULT MessageViewer::DKIMCheckSignatureJob::CheckSignatureResult createCheckResult()
const;
151 void verifySignature();
152 void verifyRSASignature();
153 void verifyEd25519Signature();
154 void computeHeaderCanonization(
bool removeQuoteOnContentType);
163 QString mHeaderCanonizationResult;
164 QString mBodyCanonizationResult;
165 DKIMCheckSignatureJob::DKIMError mError = DKIMCheckSignatureJob::DKIMError::Any;
166 DKIMCheckSignatureJob::DKIMWarning mWarning = DKIMCheckSignatureJob::DKIMWarning::Any;
167 DKIMCheckSignatureJob::DKIMStatus mStatus = DKIMCheckSignatureJob::DKIMStatus::Unknown;
170 MESSAGEVIEWER_EXPORT
QDebug operator<<(
QDebug d,
const MessageViewer::DKIMCheckSignatureJob::CheckSignatureResult &t);
171 MESSAGEVIEWER_EXPORT
QDebug operator<<(
QDebug d,
const MessageViewer::DKIMCheckSignatureJob::DKIMCheckSignatureAuthenticationResult &t);
172 Q_DECLARE_METATYPE(MessageViewer::DKIMCheckSignatureJob::CheckSignatureResult)
173 Q_DECLARE_TYPEINFO(MessageViewer::DKIMCheckSignatureJob::DKIMCheckSignatureAuthenticationResult, Q_MOVABLE_TYPE);