summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Caliste <dcaliste@free.fr>2024-04-03 13:45:50 +0200
committerDamien Caliste <dcaliste@free.fr>2024-04-10 14:14:28 +0200
commitf4459420b72bbd005886d67fba4fb34da2958b5e (patch)
tree6ad52840d24cd787a9caeaada892bda02b79cd92
parentd18952aa8def7d2087f1ef18701adf8c5cbac2ca (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.cpp2
-rw-r--r--src/libraries/qmfclient/qmailcrypto.h4
-rw-r--r--src/plugins/crypto/common/qgpgme.cpp12
-rw-r--r--src/plugins/crypto/gpgme/gpgmeplugin.cpp13
-rw-r--r--src/plugins/crypto/gpgme/gpgmeplugin.h2
-rw-r--r--src/plugins/crypto/smime/smimeplugin.cpp13
-rw-r--r--src/plugins/crypto/smime/smimeplugin.h2
-rw-r--r--tests/tst_crypto/tst_crypto.cpp4
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"));