aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS11
-rw-r--r--lang/qt/src/decryptverifyarchivejob.cpp12
-rw-r--r--lang/qt/src/decryptverifyarchivejob.h14
-rw-r--r--lang/qt/src/decryptverifyarchivejob_p.h1
-rw-r--r--lang/qt/src/decryptverifyjob.cpp12
-rw-r--r--lang/qt/src/decryptverifyjob.h14
-rw-r--r--lang/qt/src/decryptverifyjob_p.h1
-rw-r--r--lang/qt/src/qgpgmedecryptverifyarchivejob.cpp11
-rw-r--r--lang/qt/src/qgpgmedecryptverifyjob.cpp17
-rw-r--r--lang/qt/src/qgpgmeverifydetachedjob.cpp17
-rw-r--r--lang/qt/src/qgpgmeverifyopaquejob.cpp17
-rw-r--r--lang/qt/src/verifydetachedjob.cpp12
-rw-r--r--lang/qt/src/verifydetachedjob.h14
-rw-r--r--lang/qt/src/verifydetachedjob_p.h1
-rw-r--r--lang/qt/src/verifyopaquejob.cpp12
-rw-r--r--lang/qt/src/verifyopaquejob.h14
-rw-r--r--lang/qt/src/verifyopaquejob_p.h1
-rw-r--r--lang/qt/tests/run-decryptverifyarchivejob.cpp4
-rw-r--r--lang/qt/tests/run-decryptverifyjob.cpp4
-rw-r--r--lang/qt/tests/run-verifydetachedjob.cpp6
-rw-r--r--lang/qt/tests/run-verifyopaquejob.cpp4
21 files changed, 191 insertions, 8 deletions
diff --git a/NEWS b/NEWS
index 9a4eeeba..fdca7ab1 100644
--- a/NEWS
+++ b/NEWS
@@ -42,6 +42,9 @@ Noteworthy changes in version 1.24.0 (unrelease)
* qt: Add support for enabling and disabling keys. [T7239]
+ * qt: Add support for new context flag "proc-all-sigs" to the jobs that
+ verify data signatures.
+
* Interface changes relative to the 1.23.2 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GPGME_ENCRYPT_FILE NEW.
@@ -63,10 +66,14 @@ Noteworthy changes in version 1.24.0 (unrelease)
cpp: Key::revocationKeys NEW.
cpp: Error::asStdString NEW.
cpp: Error::asString DEPRECATED.
+ qt: DecryptVerifyArchiveJob::setProcessAllSignatures NEW.
+ qt: DecryptVerifyArchiveJob::processAllSignatures NEW.
qt: DecryptVerifyJob::setInputFile NEW.
qt: DecryptVerifyJob::inputFile NEW.
qt: DecryptVerifyJob::setOutputFile NEW.
qt: DecryptVerifyJob::outputFile NEW.
+ qt: DecryptVerifyJob::setProcessAllSignatures NEW.
+ qt: DecryptVerifyJob::processAllSignatures NEW.
qt: EncryptJob::setRecipients NEW.
qt: EncryptJob::recipients NEW.
qt: EncryptJob::setInputFile NEW.
@@ -99,10 +106,14 @@ Noteworthy changes in version 1.24.0 (unrelease)
qt: VerifyDetachedJob::signatureFile NEW.
qt: VerifyDetachedJob::setSignedFile NEW.
qt: VerifyDetachedJob::signedFile NEW.
+ qt: VerifyDetachedJob::setProcessAllSignatures NEW.
+ qt: VerifyDetachedJob::processAllSignatures NEW.
qt: VerifyOpaqueJob::setInputFile NEW.
qt: VerifyOpaqueJob::inputFile NEW.
qt: VerifyOpaqueJob::setOutputFile NEW.
qt: VerifyOpaqueJob::outputFile NEW.
+ qt: VerifyOpaqueJob::setProcessAllSignatures NEW.
+ qt: VerifyOpaqueJob::processAllSignatures NEW.
qt: ImportJob::setImportOptions NEW.
qt: ImportJob::importOptions NEW.
qt: QuickJob::startSetKeyEnabled NEW.
diff --git a/lang/qt/src/decryptverifyarchivejob.cpp b/lang/qt/src/decryptverifyarchivejob.cpp
index b1699c3d..d427e1fd 100644
--- a/lang/qt/src/decryptverifyarchivejob.cpp
+++ b/lang/qt/src/decryptverifyarchivejob.cpp
@@ -56,6 +56,18 @@ bool DecryptVerifyArchiveJob::isSupported()
return (gpgVersion >= "2.4.1") || (gpgVersion >= "2.2.42" && gpgVersion < "2.3.0");
}
+void DecryptVerifyArchiveJob::setProcessAllSignatures (bool processAll)
+{
+ auto d = jobPrivate<DecryptVerifyArchiveJobPrivate>(this);
+ d->m_processAllSignatures = processAll;
+}
+
+bool DecryptVerifyArchiveJob::processAllSignatures() const
+{
+ auto d = jobPrivate<DecryptVerifyArchiveJobPrivate>(this);
+ return d->m_processAllSignatures;
+}
+
void DecryptVerifyArchiveJob::setInputFile(const QString &path)
{
auto d = jobPrivate<DecryptVerifyArchiveJobPrivate>(this);
diff --git a/lang/qt/src/decryptverifyarchivejob.h b/lang/qt/src/decryptverifyarchivejob.h
index f80170c5..3139ae66 100644
--- a/lang/qt/src/decryptverifyarchivejob.h
+++ b/lang/qt/src/decryptverifyarchivejob.h
@@ -60,6 +60,20 @@ public:
static bool isSupported();
/**
+ * Enables processing of all signatures if \a processAll is true.
+ *
+ * By default, gpg (in batch mode used by GpgME) stops the verification of
+ * data signatures when a bad signature is encountered. This can be changed
+ * by setting this flag. It's equivalent to setting the context flag
+ * "proc-all-sigs".
+ *
+ * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or
+ * 2.5.1.
+ */
+ void setProcessAllSignatures(bool processAll);
+ bool processAllSignatures() const;
+
+ /**
* Sets the path of the file to read the archive from.
*
* Used if the job is started with startIt().
diff --git a/lang/qt/src/decryptverifyarchivejob_p.h b/lang/qt/src/decryptverifyarchivejob_p.h
index e0823d23..bce093db 100644
--- a/lang/qt/src/decryptverifyarchivejob_p.h
+++ b/lang/qt/src/decryptverifyarchivejob_p.h
@@ -43,6 +43,7 @@ struct DecryptVerifyArchiveJobPrivate : public JobPrivate
{
QString m_inputFilePath;
QString m_outputDirectory;
+ bool m_processAllSignatures = false;
};
}
diff --git a/lang/qt/src/decryptverifyjob.cpp b/lang/qt/src/decryptverifyjob.cpp
index f369f1d5..f96305b9 100644
--- a/lang/qt/src/decryptverifyjob.cpp
+++ b/lang/qt/src/decryptverifyjob.cpp
@@ -47,6 +47,18 @@ DecryptVerifyJob::DecryptVerifyJob(QObject *parent)
DecryptVerifyJob::~DecryptVerifyJob() = default;
+void DecryptVerifyJob::setProcessAllSignatures (bool processAll)
+{
+ auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
+ d->m_processAllSignatures = processAll;
+}
+
+bool DecryptVerifyJob::processAllSignatures() const
+{
+ auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
+ return d->m_processAllSignatures;
+}
+
void DecryptVerifyJob::setInputFile(const QString &path)
{
auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
diff --git a/lang/qt/src/decryptverifyjob.h b/lang/qt/src/decryptverifyjob.h
index 710fc80e..73dbea15 100644
--- a/lang/qt/src/decryptverifyjob.h
+++ b/lang/qt/src/decryptverifyjob.h
@@ -82,6 +82,20 @@ public:
~DecryptVerifyJob() override;
/**
+ * Enables processing of all signatures if \a processAll is true.
+ *
+ * By default, gpg (in batch mode used by GpgME) stops the verification of
+ * data signatures when a bad signature is encountered. This can be changed
+ * by setting this flag. It's equivalent to setting the context flag
+ * "proc-all-sigs".
+ *
+ * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or
+ * 2.5.1.
+ */
+ void setProcessAllSignatures(bool processAll);
+ bool processAllSignatures() const;
+
+ /**
* Sets the path of the file to decrypt (and verify).
*
* Used if the job is started with startIt().
diff --git a/lang/qt/src/decryptverifyjob_p.h b/lang/qt/src/decryptverifyjob_p.h
index bbd30b59..10701da1 100644
--- a/lang/qt/src/decryptverifyjob_p.h
+++ b/lang/qt/src/decryptverifyjob_p.h
@@ -43,6 +43,7 @@ struct DecryptVerifyJobPrivate : public JobPrivate
{
QString m_inputFilePath;
QString m_outputFilePath;
+ bool m_processAllSignatures = false;
};
}
diff --git a/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp b/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp
index eda4bfd8..10f07e53 100644
--- a/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp
+++ b/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp
@@ -119,7 +119,8 @@ static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify_from_io_device(
static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify_from_file_name(Context *ctx,
const QString &inputFile,
- const QString &outputDirectory)
+ const QString &outputDirectory,
+ bool processAllSignatures)
{
Data indata;
#ifdef Q_OS_WIN
@@ -128,6 +129,9 @@ static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify_from_file_name(
indata.setFileName(QFile::encodeName(inputFile).constData());
#endif
+ if (processAllSignatures) {
+ ctx->setFlag("proc-all-sigs", "1");
+ }
return decrypt_verify(ctx, indata, outputDirectory);
}
@@ -137,6 +141,9 @@ GpgME::Error QGpgMEDecryptVerifyArchiveJob::start(const std::shared_ptr<QIODevic
return Error::fromCode(GPG_ERR_INV_VALUE);
}
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&decrypt_verify_from_io_device,
std::placeholders::_1,
std::placeholders::_2,
@@ -153,7 +160,7 @@ GpgME::Error QGpgMEDecryptVerifyArchiveJobPrivate::startIt()
}
q->run([=](Context *ctx) {
- return decrypt_verify_from_file_name(ctx, m_inputFilePath, m_outputDirectory);
+ return decrypt_verify_from_file_name(ctx, m_inputFilePath, m_outputDirectory, m_processAllSignatures);
});
return {};
diff --git a/lang/qt/src/qgpgmedecryptverifyjob.cpp b/lang/qt/src/qgpgmedecryptverifyjob.cpp
index 24930693..e8d2ad4e 100644
--- a/lang/qt/src/qgpgmedecryptverifyjob.cpp
+++ b/lang/qt/src/qgpgmedecryptverifyjob.cpp
@@ -145,7 +145,8 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_qba(Context *ctx, cons
static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context *ctx,
const QString &inputFilePath,
- const QString &outputFilePath)
+ const QString &outputFilePath,
+ bool processAllSignatures)
{
Data indata;
#ifdef Q_OS_WIN
@@ -166,6 +167,9 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context
outdata.setFileName(QFile::encodeName(partFileGuard.tempFileName()).constData());
#endif
+ if (processAllSignatures) {
+ ctx->setFlag("proc-all-sigs", "1");
+ }
const auto results = ctx->decryptAndVerify(indata, outdata);
const auto &decryptionResult = results.first;
const auto &verificationResult = results.second;
@@ -182,18 +186,27 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context
Error QGpgMEDecryptVerifyJob::start(const QByteArray &cipherText)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&decrypt_verify_qba, std::placeholders::_1, cipherText));
return Error();
}
void QGpgMEDecryptVerifyJob::start(const std::shared_ptr<QIODevice> &cipherText, const std::shared_ptr<QIODevice> &plainText)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&decrypt_verify, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), cipherText, plainText);
}
std::pair<GpgME::DecryptionResult, GpgME::VerificationResult>
QGpgME::QGpgMEDecryptVerifyJob::exec(const QByteArray &cipherText, QByteArray &plainText)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
const result_type r = decrypt_verify_qba(context(), cipherText);
plainText = std::get<2>(r);
return std::make_pair(std::get<0>(r), std::get<1>(r));
@@ -206,7 +219,7 @@ GpgME::Error QGpgMEDecryptVerifyJobPrivate::startIt()
}
q->run([=](Context *ctx) {
- return decrypt_verify_from_filename(ctx, m_inputFilePath, m_outputFilePath);
+ return decrypt_verify_from_filename(ctx, m_inputFilePath, m_outputFilePath, m_processAllSignatures);
});
return {};
diff --git a/lang/qt/src/qgpgmeverifydetachedjob.cpp b/lang/qt/src/qgpgmeverifydetachedjob.cpp
index 1f6e47cd..91d89f96 100644
--- a/lang/qt/src/qgpgmeverifydetachedjob.cpp
+++ b/lang/qt/src/qgpgmeverifydetachedjob.cpp
@@ -131,7 +131,8 @@ static QGpgMEVerifyDetachedJob::result_type verify_detached_qba(Context *ctx, co
static QGpgMEVerifyDetachedJob::result_type verify_from_filename(Context *ctx,
const QString &signatureFilePath,
- const QString &signedFilePath)
+ const QString &signedFilePath,
+ bool processAllSignatures)
{
Data signatureData;
#ifdef Q_OS_WIN
@@ -147,6 +148,9 @@ static QGpgMEVerifyDetachedJob::result_type verify_from_filename(Context *ctx,
signedData.setFileName(QFile::encodeName(signedFilePath).constData());
#endif
+ if (processAllSignatures) {
+ ctx->setFlag("proc-all-sigs", "1");
+ }
const auto verificationResult = ctx->verifyDetachedSignature(signatureData, signedData);
Error ae;
@@ -156,18 +160,27 @@ static QGpgMEVerifyDetachedJob::result_type verify_from_filename(Context *ctx,
Error QGpgMEVerifyDetachedJob::start(const QByteArray &signature, const QByteArray &signedData)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&verify_detached_qba, std::placeholders::_1, signature, signedData));
return Error();
}
void QGpgMEVerifyDetachedJob::start(const std::shared_ptr<QIODevice> &signature, const std::shared_ptr<QIODevice> &signedData)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&verify_detached, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), signature, signedData);
}
GpgME::VerificationResult QGpgME::QGpgMEVerifyDetachedJob::exec(const QByteArray &signature,
const QByteArray &signedData)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
const result_type r = verify_detached_qba(context(), signature, signedData);
return std::get<0>(r);
}
@@ -179,7 +192,7 @@ GpgME::Error QGpgMEVerifyDetachedJobPrivate::startIt()
}
q->run([=](Context *ctx) {
- return verify_from_filename(ctx, m_signatureFilePath, m_signedFilePath);
+ return verify_from_filename(ctx, m_signatureFilePath, m_signedFilePath, m_processAllSignatures);
});
return {};
diff --git a/lang/qt/src/qgpgmeverifyopaquejob.cpp b/lang/qt/src/qgpgmeverifyopaquejob.cpp
index 19e61e37..0cca9f72 100644
--- a/lang/qt/src/qgpgmeverifyopaquejob.cpp
+++ b/lang/qt/src/qgpgmeverifyopaquejob.cpp
@@ -136,7 +136,8 @@ static QGpgMEVerifyOpaqueJob::result_type verify_opaque_qba(Context *ctx, const
static QGpgMEVerifyOpaqueJob::result_type verify_from_filename(Context *ctx,
const QString &inputFilePath,
- const QString &outputFilePath)
+ const QString &outputFilePath,
+ bool processAllSignatures)
{
Data indata;
#ifdef Q_OS_WIN
@@ -157,6 +158,9 @@ static QGpgMEVerifyOpaqueJob::result_type verify_from_filename(Context *ctx,
outdata.setFileName(QFile::encodeName(partFileGuard.tempFileName()).constData());
#endif
+ if (processAllSignatures) {
+ ctx->setFlag("proc-all-sigs", "1");
+ }
const auto verificationResult = ctx->verifyOpaqueSignature(indata, outdata);
if (!verificationResult.error().code()) {
@@ -171,17 +175,26 @@ static QGpgMEVerifyOpaqueJob::result_type verify_from_filename(Context *ctx,
Error QGpgMEVerifyOpaqueJob::start(const QByteArray &signedData)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&verify_opaque_qba, std::placeholders::_1, signedData));
return Error();
}
void QGpgMEVerifyOpaqueJob::start(const std::shared_ptr<QIODevice> &signedData, const std::shared_ptr<QIODevice> &plainText)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
run(std::bind(&verify_opaque, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), signedData, plainText);
}
GpgME::VerificationResult QGpgME::QGpgMEVerifyOpaqueJob::exec(const QByteArray &signedData, QByteArray &plainText)
{
+ if (processAllSignatures()) {
+ context()->setFlag("proc-all-sigs", "1");
+ }
const result_type r = verify_opaque_qba(context(), signedData);
plainText = std::get<1>(r);
return std::get<0>(r);
@@ -194,7 +207,7 @@ GpgME::Error QGpgMEVerifyOpaqueJobPrivate::startIt()
}
q->run([=](Context *ctx) {
- return verify_from_filename(ctx, m_inputFilePath, m_outputFilePath);
+ return verify_from_filename(ctx, m_inputFilePath, m_outputFilePath, m_processAllSignatures);
});
return {};
diff --git a/lang/qt/src/verifydetachedjob.cpp b/lang/qt/src/verifydetachedjob.cpp
index 11e630c1..68fe7f21 100644
--- a/lang/qt/src/verifydetachedjob.cpp
+++ b/lang/qt/src/verifydetachedjob.cpp
@@ -47,6 +47,18 @@ VerifyDetachedJob::VerifyDetachedJob(QObject *parent)
VerifyDetachedJob::~VerifyDetachedJob() = default;
+void VerifyDetachedJob::setProcessAllSignatures (bool processAll)
+{
+ auto d = jobPrivate<VerifyDetachedJobPrivate>(this);
+ d->m_processAllSignatures = processAll;
+}
+
+bool VerifyDetachedJob::processAllSignatures() const
+{
+ auto d = jobPrivate<VerifyDetachedJobPrivate>(this);
+ return d->m_processAllSignatures;
+}
+
void VerifyDetachedJob::setSignatureFile(const QString &path)
{
auto d = jobPrivate<VerifyDetachedJobPrivate>(this);
diff --git a/lang/qt/src/verifydetachedjob.h b/lang/qt/src/verifydetachedjob.h
index c8c516bf..b5b668e3 100644
--- a/lang/qt/src/verifydetachedjob.h
+++ b/lang/qt/src/verifydetachedjob.h
@@ -79,6 +79,20 @@ public:
~VerifyDetachedJob() override;
/**
+ * Enables processing of all signatures if \a processAll is true.
+ *
+ * By default, gpg (in batch mode used by GpgME) stops the verification of
+ * data signatures when a bad signature is encountered. This can be changed
+ * by setting this flag. It's equivalent to setting the context flag
+ * "proc-all-sigs".
+ *
+ * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or
+ * 2.5.1.
+ */
+ void setProcessAllSignatures(bool processAll);
+ bool processAllSignatures() const;
+
+ /**
* Sets the path of the file containing the signature to verify.
*
* Used if the job is started with startIt().
diff --git a/lang/qt/src/verifydetachedjob_p.h b/lang/qt/src/verifydetachedjob_p.h
index 1fedc8fb..cc594210 100644
--- a/lang/qt/src/verifydetachedjob_p.h
+++ b/lang/qt/src/verifydetachedjob_p.h
@@ -43,6 +43,7 @@ struct VerifyDetachedJobPrivate : public JobPrivate
{
QString m_signatureFilePath;
QString m_signedFilePath;
+ bool m_processAllSignatures = false;
};
}
diff --git a/lang/qt/src/verifyopaquejob.cpp b/lang/qt/src/verifyopaquejob.cpp
index 1ae8e75b..dced4595 100644
--- a/lang/qt/src/verifyopaquejob.cpp
+++ b/lang/qt/src/verifyopaquejob.cpp
@@ -47,6 +47,18 @@ VerifyOpaqueJob::VerifyOpaqueJob(QObject *parent)
VerifyOpaqueJob::~VerifyOpaqueJob() = default;
+void VerifyOpaqueJob::setProcessAllSignatures (bool processAll)
+{
+ auto d = jobPrivate<VerifyOpaqueJobPrivate>(this);
+ d->m_processAllSignatures = processAll;
+}
+
+bool VerifyOpaqueJob::processAllSignatures() const
+{
+ auto d = jobPrivate<VerifyOpaqueJobPrivate>(this);
+ return d->m_processAllSignatures;
+}
+
void VerifyOpaqueJob::setInputFile(const QString &path)
{
auto d = jobPrivate<VerifyOpaqueJobPrivate>(this);
diff --git a/lang/qt/src/verifyopaquejob.h b/lang/qt/src/verifyopaquejob.h
index 8dd73141..e006886b 100644
--- a/lang/qt/src/verifyopaquejob.h
+++ b/lang/qt/src/verifyopaquejob.h
@@ -81,6 +81,20 @@ public:
~VerifyOpaqueJob() override;
/**
+ * Enables processing of all signatures if \a processAll is true.
+ *
+ * By default, gpg (in batch mode used by GpgME) stops the verification of
+ * data signatures when a bad signature is encountered. This can be changed
+ * by setting this flag. It's equivalent to setting the context flag
+ * "proc-all-sigs".
+ *
+ * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or
+ * 2.5.1.
+ */
+ void setProcessAllSignatures(bool processAll);
+ bool processAllSignatures() const;
+
+ /**
* Sets the path of the file to verify.
*
* Used if the job is started with startIt().
diff --git a/lang/qt/src/verifyopaquejob_p.h b/lang/qt/src/verifyopaquejob_p.h
index 3dce6dec..9686f01c 100644
--- a/lang/qt/src/verifyopaquejob_p.h
+++ b/lang/qt/src/verifyopaquejob_p.h
@@ -43,6 +43,7 @@ struct VerifyOpaqueJobPrivate : public JobPrivate
{
QString m_inputFilePath;
QString m_outputFilePath;
+ bool m_processAllSignatures = false;
};
}
diff --git a/lang/qt/tests/run-decryptverifyarchivejob.cpp b/lang/qt/tests/run-decryptverifyarchivejob.cpp
index 36d023ec..6d5615c0 100644
--- a/lang/qt/tests/run-decryptverifyarchivejob.cpp
+++ b/lang/qt/tests/run-decryptverifyarchivejob.cpp
@@ -56,6 +56,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s)
}
struct CommandLineOptions {
+ bool processAllSignatures = false;
QString outputDirectory;
QString archiveName;
};
@@ -69,6 +70,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.addHelpOption();
parser.addOptions({
{{"C", "directory"}, "Extract the files into the directory DIRECTORY.", "DIRECTORY"},
+ {"process-all-signatures", "Don't stop signature checking after bad signature."},
});
parser.addPositionalArgument("archive", "The archive to decrypt and extract");
@@ -79,6 +81,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.showHelp(1);
}
+ options.processAllSignatures = parser.isSet("process-all-signatures");
options.outputDirectory = parser.value("directory");
options.archiveName = args.first();
@@ -104,6 +107,7 @@ int main(int argc, char **argv)
std::cerr << "Error: Could not create job" << std::endl;
return 1;
}
+ job->setProcessAllSignatures(options.processAllSignatures);
job->setInputFile(options.archiveName);
job->setOutputDirectory(options.outputDirectory);
QObject::connect(job, &QGpgME::DecryptVerifyArchiveJob::result, &app, [](const GpgME::DecryptionResult &decryptionResult, const GpgME::VerificationResult &verificationResult, const QString &auditLog, const GpgME::Error &) {
diff --git a/lang/qt/tests/run-decryptverifyjob.cpp b/lang/qt/tests/run-decryptverifyjob.cpp
index da8ec9fe..805bad68 100644
--- a/lang/qt/tests/run-decryptverifyjob.cpp
+++ b/lang/qt/tests/run-decryptverifyjob.cpp
@@ -58,6 +58,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s)
}
struct CommandLineOptions {
+ bool processAllSignatures = false;
QString inputFile;
QString outputFile;
std::chrono::seconds cancelTimeout{0};
@@ -73,6 +74,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.addOptions({
{{"o", "output"}, "Write output to FILE.", "FILE"},
{"cancel-after", "Cancel the running job after SECONDS seconds.", "SECONDS"},
+ {"process-all-signatures", "Don't stop signature checking after bad signature."},
});
parser.addPositionalArgument("file", "File to decrypt", "FILE");
@@ -83,6 +85,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.showHelp(1);
}
+ options.processAllSignatures = parser.isSet("process-all-signatures");
options.inputFile = args.front();
options.outputFile = parser.value("output");
if (parser.isSet("cancel-after")) {
@@ -146,6 +149,7 @@ int main(int argc, char **argv)
std::shared_ptr<QFile> input;
GpgME::Error err;
+ job->setProcessAllSignatures(options.processAllSignatures);
if (output) {
input.reset(new QFile{options.inputFile});
input->open(QIODevice::ReadOnly);
diff --git a/lang/qt/tests/run-verifydetachedjob.cpp b/lang/qt/tests/run-verifydetachedjob.cpp
index 60ba5470..17a719e9 100644
--- a/lang/qt/tests/run-verifydetachedjob.cpp
+++ b/lang/qt/tests/run-verifydetachedjob.cpp
@@ -56,6 +56,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s)
}
struct CommandLineOptions {
+ bool processAllSignatures = false;
QString signatureFile;
QString signedFile;
};
@@ -67,6 +68,9 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
QCommandLineParser parser;
parser.setApplicationDescription("Test program for VerifyDetachedJob");
parser.addHelpOption();
+ parser.addOptions({
+ {"process-all-signatures", "Don't stop signature checking after bad signature."},
+ });
parser.addPositionalArgument("signature", "Detached SIGNATURE to verify", "SIGNATURE");
parser.addPositionalArgument("signed file", "FILE containing the signed data", "FILE");
@@ -77,6 +81,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.showHelp(1);
}
+ options.processAllSignatures = parser.isSet("process-all-signatures");
options.signatureFile = args[0];
options.signedFile = args[1];
@@ -110,6 +115,7 @@ int main(int argc, char **argv)
std::shared_ptr<QFile> input;
GpgME::Error err;
+ job->setProcessAllSignatures(options.processAllSignatures);
job->setSignatureFile(options.signatureFile);
job->setSignedFile(options.signedFile);
err = job->startIt();
diff --git a/lang/qt/tests/run-verifyopaquejob.cpp b/lang/qt/tests/run-verifyopaquejob.cpp
index 09578430..a3245b4f 100644
--- a/lang/qt/tests/run-verifyopaquejob.cpp
+++ b/lang/qt/tests/run-verifyopaquejob.cpp
@@ -57,6 +57,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s)
}
struct CommandLineOptions {
+ bool processAllSignatures = false;
QString inputFile;
QString outputFile;
std::chrono::seconds cancelTimeout{0};
@@ -72,6 +73,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.addOptions({
{{"o", "output"}, "Write output to FILE.", "FILE"},
{"cancel-after", "Cancel the running job after SECONDS seconds.", "SECONDS"},
+ {"process-all-signatures", "Don't stop signature checking after bad signature."},
});
parser.addPositionalArgument("file", "File to verify", "FILE");
@@ -82,6 +84,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments)
parser.showHelp(1);
}
+ options.processAllSignatures = parser.isSet("process-all-signatures");
options.inputFile = args.front();
options.outputFile = parser.value("output");
if (parser.isSet("cancel-after")) {
@@ -143,6 +146,7 @@ int main(int argc, char **argv)
std::shared_ptr<QFile> input;
GpgME::Error err;
+ job->setProcessAllSignatures(options.processAllSignatures);
if (output) {
input.reset(new QFile{options.inputFile});
input->open(QIODevice::ReadOnly);