From c5576c85c92c464ff3aa53f680ce18d8b51f60ab Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 19 Apr 2019 17:27:39 +0300 Subject: Add plugin signature verification policies --- lib/pluginloader/pluginloader.h | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 lib/pluginloader/pluginloader.h (limited to 'lib/pluginloader/pluginloader.h') diff --git a/lib/pluginloader/pluginloader.h b/lib/pluginloader/pluginloader.h new file mode 100644 index 0000000..0c8bcd3 --- /dev/null +++ b/lib/pluginloader/pluginloader.h @@ -0,0 +1,55 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include + +class PluginLoader : public QPluginLoader +{ + Q_OBJECT + +public: + enum VerifyState { + // uninitialized state + SignatureUnverified = -1, + + // signature is optional, match is optional + SignatureCheckIfAvailable = 1, + + SignatureComputeFailed = 2, // error computing signature + SignatureMismatched = 3, // signature does not match + + // signature is optional, match is required + SignatureMatchIfAvailable = 4, + + SignatureMissing = 5, // signature is not available + + // signature required, match is required + SignatureMatchRequired = 10, + + SignatureMatched = 20 // signature is matched + }; + + PluginLoader(const QString &fileName, const VerifyState sigLevel = SignatureMissing, QObject *parent = nullptr); + ~PluginLoader() = default; + + QString errorString() const + { + if(signature < requiredSignatureLevel) + return QString("Required signature level: %2; Signature level: %3").arg(QString::number((int) requiredSignatureLevel), QString::number((int) signature)); + else + return QPluginLoader::errorString(); + } + + VerifyState verify(const char *hashName = "SHA256") const; + //bool load(); + +private: + const VerifyState requiredSignatureLevel; + VerifyState signature = SignatureUnverified; +}; + -- cgit v1.2.1