From 0bf5450365934c39ed0bb480712adaab2fa54386 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 26 Jan 2020 23:14:53 +0200 Subject: pluginloader: add test for PluginLoader::verify --- lib/pluginloader/pluginloader.cpp | 40 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'lib/pluginloader/pluginloader.cpp') diff --git a/lib/pluginloader/pluginloader.cpp b/lib/pluginloader/pluginloader.cpp index c8358bf..e5c4b89 100644 --- a/lib/pluginloader/pluginloader.cpp +++ b/lib/pluginloader/pluginloader.cpp @@ -12,17 +12,21 @@ #include #include "publicKey.h" -PluginLoader::PluginLoader(const QString &fileName, const VerifyState sigLevel, QObject *parent) +PluginLoader::PluginLoader(const QString &fileName, PluginLoader::SignatureState state, QObject *parent) : QPluginLoader(fileName, parent) - , requiredSignatureLevel(sigLevel) + , m_state(state) { } -PluginLoader::VerifyState PluginLoader::verify(const char *hashName) const +bool PluginLoader::verify(const char *hashName) { const QString sigName = this->fileName() + ".sig"; if(!QFile::exists(sigName)) { - return SignatureMissing; + if(m_state.ignored || m_state.checked) + return true; + + m_sigError = tr("A signature is required, but none was found."); + return false; } auto *bio = BIO_new_mem_buf(publicKey_pem, publicKey_pem_len); @@ -39,7 +43,8 @@ PluginLoader::VerifyState PluginLoader::verify(const char *hashName) const int rc = EVP_DigestVerifyInit(ctx, NULL, md, NULL, key); if(rc != 1) { - return SignatureMismatched; + m_sigError = tr("Failed to compute signature (stage=init)"); + return false; } // read plugin into DigestVerifyUpdate @@ -53,8 +58,10 @@ PluginLoader::VerifyState PluginLoader::verify(const char *hashName) const len -= read; rc = EVP_DigestVerifyUpdate(ctx, buf, read); - if(rc != 1) - return SignatureComputeFailed; + if(rc != 1) { + m_sigError = tr("Failed to compute signature (staga=update)"); + return false; + } } delete[] buf; plugin.close(); @@ -74,20 +81,13 @@ PluginLoader::VerifyState PluginLoader::verify(const char *hashName) const delete sig; if(rc == 1) - return SignatureMatched; + return true; else { - return SignatureMismatched; - } -} -/* -bool PluginLoader::load() -{ - if(signature == SignatureUnverified) - signature = this->verify(); + if(m_state.ignored) + return true; - if(signature > requiredSignatureLevel) - return QPluginLoader::load(); - else + m_sigError = tr("Signature does not match"); return false; + } } -*/ + -- cgit v1.2.1