diff options
author | Damien Caliste <dcaliste@free.fr> | 2024-04-03 13:45:50 +0200 |
---|---|---|
committer | Damien Caliste <dcaliste@free.fr> | 2024-04-10 14:14:28 +0200 |
commit | f4459420b72bbd005886d67fba4fb34da2958b5e (patch) | |
tree | 6ad52840d24cd787a9caeaada892bda02b79cd92 | |
parent | d18952aa8def7d2087f1ef18701adf8c5cbac2ca (diff) |
Adjust crypto sign() API
Make sign() API to operate on a pointer on a
part, instead of a reference, to emphasis the
fact that it will change the part itself, making
it a multipart/signed container.
Change-Id: I55a1e2d15ee170909ae4aa8f2c0e8f8e88c9134c
Reviewed-by: Pekka Vuorela <pvuorela@iki.fi>
-rw-r--r-- | src/libraries/qmfclient/qmailcrypto.cpp | 2 | ||||
-rw-r--r-- | src/libraries/qmfclient/qmailcrypto.h | 4 | ||||
-rw-r--r-- | src/plugins/crypto/common/qgpgme.cpp | 12 | ||||
-rw-r--r-- | src/plugins/crypto/gpgme/gpgmeplugin.cpp | 13 | ||||
-rw-r--r-- | src/plugins/crypto/gpgme/gpgmeplugin.h | 2 | ||||
-rw-r--r-- | src/plugins/crypto/smime/smimeplugin.cpp | 13 | ||||
-rw-r--r-- | src/plugins/crypto/smime/smimeplugin.h | 2 | ||||
-rw-r--r-- | tests/tst_crypto/tst_crypto.cpp | 4 |
8 files changed, 31 insertions, 21 deletions
diff --git a/src/libraries/qmfclient/qmailcrypto.cpp b/src/libraries/qmfclient/qmailcrypto.cpp index b64f962d..45090744 100644 --- a/src/libraries/qmfclient/qmailcrypto.cpp +++ b/src/libraries/qmfclient/qmailcrypto.cpp @@ -175,7 +175,7 @@ QMailCryptoFwd::VerificationResult QMailCryptographicServiceFactory::verifySigna return QMailCryptoFwd::VerificationResult(QMailCryptoFwd::MissingSignature); } -QMailCryptoFwd::SignatureResult QMailCryptographicServiceFactory::sign(QMailMessagePartContainer &part, +QMailCryptoFwd::SignatureResult QMailCryptographicServiceFactory::sign(QMailMessagePartContainer *part, const QString &crypto, const QStringList &keys, QMailCryptoFwd::PassphraseCallback cb) diff --git a/src/libraries/qmfclient/qmailcrypto.h b/src/libraries/qmfclient/qmailcrypto.h index 6dc67a4d..767f9883 100644 --- a/src/libraries/qmfclient/qmailcrypto.h +++ b/src/libraries/qmfclient/qmailcrypto.h @@ -48,7 +48,7 @@ public: virtual bool partHasSignature(const QMailMessagePartContainer &part) const = 0; virtual QMailCryptoFwd::VerificationResult verifySignature(const QMailMessagePartContainer &part) const = 0; - virtual QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer &part, + virtual QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer *part, const QStringList &keys) const = 0; virtual void setPassphraseCallback(QMailCryptoFwd::PassphraseCallback cb) = 0; @@ -73,7 +73,7 @@ public: QMailCryptographicServiceInterface* instance(const QString &engine); static QMailCryptoFwd::VerificationResult verifySignature(const QMailMessagePartContainer &part); - static QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer &part, + static QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer *part, const QString &crypto, const QStringList &keys, QMailCryptoFwd::PassphraseCallback cb = Q_NULLPTR); diff --git a/src/plugins/crypto/common/qgpgme.cpp b/src/plugins/crypto/common/qgpgme.cpp index a9c2e24c..1d9ff598 100644 --- a/src/plugins/crypto/common/qgpgme.cpp +++ b/src/plugins/crypto/common/qgpgme.cpp @@ -210,9 +210,9 @@ struct GPGmeData { { return data; } - bool operator!() + bool isValid() { - return (data == 0); + return (data != 0); } QByteArray errorMessage() const { @@ -241,7 +241,7 @@ QMailCryptoFwd::SignatureResult QMailCryptoGPGME::getSignature(const QByteArray micalg.clear(); GPGmeData sig; - if (!sig) { + if (!sig.isValid()) { qWarning() << "cannot create signature data:" << sig.errorMessage(); return toSignatureResult(sig.err); } @@ -254,7 +254,7 @@ QMailCryptoFwd::SignatureResult QMailCryptoGPGME::getSignature(const QByteArray QByteArray mess(canonicalizeStr(message)); GPGmeData data(mess); - if (!data) { + if (!data.isValid()) { qWarning() << "cannot create message data:" << data.errorMessage(); return toSignatureResult(data.err); } @@ -378,14 +378,14 @@ QMailCryptoFwd::SignatureResult QMailCryptoGPGME::verify(const QByteArray &sigDa keyResults.clear(); GPGmeData sig(sigData); - if (!sig) { + if (!sig.isValid()) { qWarning() << "cannot create message data:" << sig.errorMessage(); return toSignatureResult(sig.err); } QByteArray mess(canonicalizeStr(messageData.constData())); GPGmeData signed_text(mess); - if (!signed_text) { + if (!signed_text.isValid()) { qWarning() << "cannot create signature data:" << signed_text.errorMessage(); return toSignatureResult(signed_text.err); } diff --git a/src/plugins/crypto/gpgme/gpgmeplugin.cpp b/src/plugins/crypto/gpgme/gpgmeplugin.cpp index 3ab2c078..1cfd4436 100644 --- a/src/plugins/crypto/gpgme/gpgmeplugin.cpp +++ b/src/plugins/crypto/gpgme/gpgmeplugin.cpp @@ -73,12 +73,17 @@ QMailCryptoFwd::VerificationResult QMailCryptoGPG::verifySignature(const QMailMe return result; } -QMailCryptoFwd::SignatureResult QMailCryptoGPG::sign(QMailMessagePartContainer &part, +QMailCryptoFwd::SignatureResult QMailCryptoGPG::sign(QMailMessagePartContainer *part, const QStringList &keys) const { + if (!part) { + qWarning() << "unable to sign a NULL part."; + return QMailCryptoFwd::UnknownError; + } + QByteArray signedData, micalg; QMailCryptoFwd::SignatureResult result; - result = computeSignature(part, keys, signedData, micalg); + result = computeSignature(*part, keys, signedData, micalg); if (result != QMailCryptoFwd::SignatureValid) return result; @@ -86,10 +91,10 @@ QMailCryptoFwd::SignatureResult QMailCryptoGPG::sign(QMailMessagePartContainer & QList<QMailMessageHeaderField::ParameterType> parameters; parameters << QMailMessageHeaderField::ParameterType("micalg", micalg); parameters << QMailMessageHeaderField::ParameterType("protocol", "application/pgp-signature"); - part.setMultipartType(QMailMessagePartContainerFwd::MultipartSigned, parameters); + part->setMultipartType(QMailMessagePartContainerFwd::MultipartSigned, parameters); // Write the signature data in the second part. - QMailMessagePart &signature = part.partAt(1); + QMailMessagePart &signature = part->partAt(1); signature.setBody(QMailMessageBody::fromData(signedData, QMailMessageContentType("application/pgp-signature"), diff --git a/src/plugins/crypto/gpgme/gpgmeplugin.h b/src/plugins/crypto/gpgme/gpgmeplugin.h index 15378950..bd491335 100644 --- a/src/plugins/crypto/gpgme/gpgmeplugin.h +++ b/src/plugins/crypto/gpgme/gpgmeplugin.h @@ -51,7 +51,7 @@ public: bool partHasSignature(const QMailMessagePartContainer &part) const Q_DECL_OVERRIDE; QMailCryptoFwd::VerificationResult verifySignature(const QMailMessagePartContainer &part) const Q_DECL_OVERRIDE; - QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer &part, const QStringList &keys) const Q_DECL_OVERRIDE; + QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer *part, const QStringList &keys) const Q_DECL_OVERRIDE; }; #endif diff --git a/src/plugins/crypto/smime/smimeplugin.cpp b/src/plugins/crypto/smime/smimeplugin.cpp index 91012ef6..80257145 100644 --- a/src/plugins/crypto/smime/smimeplugin.cpp +++ b/src/plugins/crypto/smime/smimeplugin.cpp @@ -74,12 +74,17 @@ QMailCryptoFwd::VerificationResult QMailCryptoSMIME::verifySignature(const QMail return result; } -QMailCryptoFwd::SignatureResult QMailCryptoSMIME::sign(QMailMessagePartContainer &part, +QMailCryptoFwd::SignatureResult QMailCryptoSMIME::sign(QMailMessagePartContainer *part, const QStringList &keys) const { + if (!part) { + qWarning() << "unable to sign a NULL part."; + return QMailCryptoFwd::UnknownError; + } + QByteArray signedData, micalg; QMailCryptoFwd::SignatureResult result; - result = computeSignature(part, keys, signedData, micalg); + result = computeSignature(*part, keys, signedData, micalg); if (result != QMailCryptoFwd::SignatureValid) return result; @@ -87,10 +92,10 @@ QMailCryptoFwd::SignatureResult QMailCryptoSMIME::sign(QMailMessagePartContainer QList<QMailMessageHeaderField::ParameterType> parameters; parameters << QMailMessageHeaderField::ParameterType("micalg", micalg); parameters << QMailMessageHeaderField::ParameterType("protocol", "application/pkcs7-signature"); - part.setMultipartType(QMailMessagePartContainerFwd::MultipartSigned, parameters); + part->setMultipartType(QMailMessagePartContainerFwd::MultipartSigned, parameters); // Write the signature data in the second part. - QMailMessagePart &signature = part.partAt(1); + QMailMessagePart &signature = part->partAt(1); QMailMessageContentDisposition disposition; disposition.setType(QMailMessageContentDispositionFwd::Attachment); disposition.setFilename("smime.p7s"); diff --git a/src/plugins/crypto/smime/smimeplugin.h b/src/plugins/crypto/smime/smimeplugin.h index 4134bf38..341d37f7 100644 --- a/src/plugins/crypto/smime/smimeplugin.h +++ b/src/plugins/crypto/smime/smimeplugin.h @@ -51,7 +51,7 @@ public: bool partHasSignature(const QMailMessagePartContainer &part) const Q_DECL_OVERRIDE; QMailCryptoFwd::VerificationResult verifySignature(const QMailMessagePartContainer &part) const Q_DECL_OVERRIDE; - QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer &part, + QMailCryptoFwd::SignatureResult sign(QMailMessagePartContainer *part, const QStringList &keys) const Q_DECL_OVERRIDE; }; diff --git a/tests/tst_crypto/tst_crypto.cpp b/tests/tst_crypto/tst_crypto.cpp index d6bf3c9b..f36aa074 100644 --- a/tests/tst_crypto/tst_crypto.cpp +++ b/tests/tst_crypto/tst_crypto.cpp @@ -384,7 +384,7 @@ void tst_Crypto::sign() // Check message signing. QMailMessage msg = QMailMessage::fromRfc2822File(QStringLiteral("%1/%2").arg(QCoreApplication::applicationDirPath(), rfc2822Filename)); - QCOMPARE(QMailCryptographicServiceFactory::sign(msg, plugin, QStringList(fingerprint), passphrase), expectedStatus); + QCOMPARE(QMailCryptographicServiceFactory::sign(&msg, plugin, QStringList(fingerprint), passphrase), expectedStatus); // Check signed message output. // Replace the random boundary strings with a fixed one for comparison. @@ -413,7 +413,7 @@ void tst_Crypto::signVerify() message.setBody(QMailMessageBody::fromData("test", type, QMailMessageBody::Base64)); // Sign it with the PGP key (no password). - QMailCryptoFwd::SignatureResult r = QMailCryptographicServiceFactory::sign(message, "libgpgme.so", QStringList() << m_pgpKey); + QMailCryptoFwd::SignatureResult r = QMailCryptographicServiceFactory::sign(&message, "libgpgme.so", QStringList() << m_pgpKey); QCOMPARE(r, QMailCryptoFwd::SignatureValid); QCOMPARE(message.partCount(), uint(2)); QCOMPARE(message.contentType().type(), QByteArray("multipart")); |