aboutsummaryrefslogtreecommitdiffstats
path: root/lang/qt/src
diff options
context:
space:
mode:
Diffstat (limited to 'lang/qt/src')
-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
16 files changed, 162 insertions, 8 deletions
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;
};
}