diff options
Diffstat (limited to '')
-rw-r--r-- | src/gpg/result_analyse/DecryptResultAnalyse.cpp | 36 | ||||
-rw-r--r-- | src/gpg/result_analyse/DecryptResultAnalyse.h | 4 | ||||
-rw-r--r-- | test/GpgCoreTestBasicOpera.cpp | 71 |
3 files changed, 81 insertions, 30 deletions
diff --git a/src/gpg/result_analyse/DecryptResultAnalyse.cpp b/src/gpg/result_analyse/DecryptResultAnalyse.cpp index 9c3e7dd0..4f5cf936 100644 --- a/src/gpg/result_analyse/DecryptResultAnalyse.cpp +++ b/src/gpg/result_analyse/DecryptResultAnalyse.cpp @@ -24,11 +24,13 @@ #include "gpg/result_analyse/DecryptResultAnalyse.h" +#include <utility> + #include "gpg/function/GpgKeyGetter.h" -GpgFrontend::DecryptResultAnalyse::DecryptResultAnalyse(GpgError error, - GpgDecrResult result) - : error(error), result(std::move(result)) {} +GpgFrontend::DecryptResultAnalyse::DecryptResultAnalyse(GpgError m_error, + GpgDecrResult m_result) + : error(m_error), result(std::move(m_result)) {} void GpgFrontend::DecryptResultAnalyse::do_analyse() { stream << "[#]" << _("Decrypt Operation"); @@ -55,11 +57,11 @@ void GpgFrontend::DecryptResultAnalyse::do_analyse() { stream << _("MIME") << ": " << _("true") << std::endl; } - auto reci = result->recipients; - if (reci != nullptr) stream << _("Recipient(s)") << ": " << std::endl; - while (reci != nullptr) { - print_reci(stream, reci); - reci = reci->next; + auto recipient = result->recipients; + if (recipient != nullptr) stream << _("Recipient(s)") << ": " << std::endl; + while (recipient != nullptr) { + print_recipient(stream, recipient); + recipient = recipient->next; } stream << "<------------" << std::endl; } @@ -67,12 +69,13 @@ void GpgFrontend::DecryptResultAnalyse::do_analyse() { stream << std::endl; } -bool GpgFrontend::DecryptResultAnalyse::print_reci(std::stringstream &stream, - gpgme_recipient_t reci) { - bool keyFound = true; - stream << " {>} " << _("Recipient") << ": "; +void GpgFrontend::DecryptResultAnalyse::print_recipient( + std::stringstream &stream, gpgme_recipient_t recipient) { + // check + if (recipient->keyid == nullptr || recipient->pubkey_algo) return; - auto key = GpgFrontend::GpgKeyGetter::GetInstance().GetKey(reci->keyid); + stream << " {>} " << _("Recipient") << ": "; + auto key = GpgFrontend::GpgKeyGetter::GetInstance().GetKey(recipient->keyid); if (key.good()) { stream << key.name().c_str(); if (!key.email().empty()) { @@ -81,14 +84,11 @@ bool GpgFrontend::DecryptResultAnalyse::print_reci(std::stringstream &stream, } else { stream << "<" << _("Unknown") << ">"; setStatus(0); - keyFound = false; } stream << std::endl; - stream << " " << _("Keu ID") << ": " << reci->keyid << std::endl; + stream << " " << _("Keu ID") << ": " << recipient->keyid << std::endl; stream << " " << _("Public Algo") << ": " - << gpgme_pubkey_algo_name(reci->pubkey_algo) << std::endl; - - return keyFound; + << gpgme_pubkey_algo_name(recipient->pubkey_algo) << std::endl; } diff --git a/src/gpg/result_analyse/DecryptResultAnalyse.h b/src/gpg/result_analyse/DecryptResultAnalyse.h index 0864c23b..729d8853 100644 --- a/src/gpg/result_analyse/DecryptResultAnalyse.h +++ b/src/gpg/result_analyse/DecryptResultAnalyse.h @@ -32,13 +32,13 @@ namespace GpgFrontend { class DecryptResultAnalyse : public ResultAnalyse { public: - explicit DecryptResultAnalyse(GpgError error, GpgDecrResult result); + explicit DecryptResultAnalyse(GpgError m_error, GpgDecrResult m_result); protected: void do_analyse() final; private: - bool print_reci(std::stringstream &stream, gpgme_recipient_t reci); + void print_recipient(std::stringstream &stream, gpgme_recipient_t recipient); GpgError error; GpgDecrResult result; diff --git a/test/GpgCoreTestBasicOpera.cpp b/test/GpgCoreTestBasicOpera.cpp index b06068a1..283ceb82 100644 --- a/test/GpgCoreTestBasicOpera.cpp +++ b/test/GpgCoreTestBasicOpera.cpp @@ -31,18 +31,18 @@ #include "gpg/GpgConstants.h" #include "gpg/function/BasicOperator.h" #include "gpg/function/GpgKeyGetter.h" -#include "gpg/model/GpgKey.h" +#include "gpg/result_analyse/DecryptResultAnalyse.h" using namespace GpgFrontend; TEST_F(GpgCoreTest, CoreEncryptDecrTest) { - auto encrpyt_key = GpgKeyGetter::GetInstance(default_channel) + auto encrypt_key = GpgKeyGetter::GetInstance(default_channel) .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1"); ByteArray encrypt_text = "Hello GpgFrontend!"; ByteArrayPtr encr_out_data; GpgEncrResult e_result; KeyListPtr keys = std::make_unique<KeyArgsList>(); - keys->push_back(std::move(encrpyt_key)); + keys->push_back(std::move(encrypt_key)); auto err = BasicOperator::GetInstance(default_channel) .Encrypt(std::move(keys), encrypt_text, encr_out_data, e_result); @@ -59,14 +59,65 @@ TEST_F(GpgCoreTest, CoreEncryptDecrTest) { ASSERT_EQ(*decr_out_data, encrypt_text); } +TEST_F(GpgCoreTest, CoreEncryptDecrTest_KeyNotFound_1) { + ByteArrayPtr encr_out_data = std::make_unique<ByteArray>( + "-----BEGIN PGP MESSAGE-----\n" + "\n" + "hQEMA6UM/S9sZ32MAQf9Fb6gp6nvgKTQBv2mmjXia6ODXYq6kNeLsPVzLCbHyWOs\n" + "0GDED11R1NksA3EQxFf4fzLkDpbo68r5bWy7c28c99Fr68IRET19Tw6Gu65MQezD\n" + "Rdzo1oVqmK9sfKqOT3+0S2H+suFYw5kfBztMZLVGGl9R9fOXdKcj0fqGs2br3e9D\n" + "ArBFqq07Bae2DD1J8mckWB2x9Uem4vjRiY+vEJcEdAS1N5xu1n7qzzyDgcRcS34X\n" + "PNBQeTrFMc2RS7mnip2DbyZVEjORobhguK6xZyqXXbvFacStGWDLptV3dcCn4JRO\n" + "dIORyt5wugqAtgE4qEGTvr/pJ/oXPw4Wve/trece/9I/AR38vW8ntVmDa/hV75iZ\n" + "4QGAhQ8grD4kq31GHXHUOmBX51XXW9SINmplC8elEx3R460EUZJjjb0OvTih+eZH\n" + "=8n2H\n" + "-----END PGP MESSAGE-----"); + + GpgDecrResult d_result; + ByteArrayPtr decr_out_data; + auto err = BasicOperator::GetInstance(default_channel) + .Decrypt(*encr_out_data, decr_out_data, d_result); + ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_SECKEY); + ASSERT_NE(d_result->recipients, nullptr); + ASSERT_EQ(std::string(d_result->recipients->keyid), "A50CFD2F6C677D8C"); +} + +TEST_F(GpgCoreTest, CoreEncryptDecrTest_KeyNotFound_ResultAnalyse) { + ByteArrayPtr encr_out_data = std::make_unique<ByteArray>( + "-----BEGIN PGP MESSAGE-----\n" + "\n" + "hQEMA6UM/S9sZ32MAQf9Fb6gp6nvgKTQBv2mmjXia6ODXYq6kNeLsPVzLCbHyWOs\n" + "0GDED11R1NksA3EQxFf4fzLkDpbo68r5bWy7c28c99Fr68IRET19Tw6Gu65MQezD\n" + "Rdzo1oVqmK9sfKqOT3+0S2H+suFYw5kfBztMZLVGGl9R9fOXdKcj0fqGs2br3e9D\n" + "ArBFqq07Bae2DD1J8mckWB2x9Uem4vjRiY+vEJcEdAS1N5xu1n7qzzyDgcRcS34X\n" + "PNBQeTrFMc2RS7mnip2DbyZVEjORobhguK6xZyqXXbvFacStGWDLptV3dcCn4JRO\n" + "dIORyt5wugqAtgE4qEGTvr/pJ/oXPw4Wve/trece/9I/AR38vW8ntVmDa/hV75iZ\n" + "4QGAhQ8grD4kq31GHXHUOmBX51XXW9SINmplC8elEx3R460EUZJjjb0OvTih+eZH\n" + "=8n2H\n" + "-----END PGP MESSAGE-----"); + + GpgDecrResult d_result; + ByteArrayPtr decr_out_data; + auto err = BasicOperator::GetInstance(default_channel) + .Decrypt(*encr_out_data, decr_out_data, d_result); + ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_SECKEY); + ASSERT_NE(d_result->recipients, nullptr); + ASSERT_EQ(std::string(d_result->recipients->keyid), "A50CFD2F6C677D8C"); + + DecryptResultAnalyse analyse{err, d_result}; + analyse.analyse(); + ASSERT_EQ(analyse.getStatus(), -1); + ASSERT_FALSE(analyse.getResultReport().empty()); +} + TEST_F(GpgCoreTest, CoreSignVerifyNormalTest) { - auto encrpyt_key = GpgKeyGetter::GetInstance(default_channel) + auto encrypt_key = GpgKeyGetter::GetInstance(default_channel) .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1"); ByteArray sign_text = "Hello GpgFrontend!"; ByteArrayPtr sign_out_data; GpgSignResult s_result; KeyListPtr keys = std::make_unique<KeyArgsList>(); - keys->push_back(std::move(encrpyt_key)); + keys->push_back(std::move(encrypt_key)); auto err = BasicOperator::GetInstance(default_channel) .Sign(std::move(keys), sign_text, sign_out_data, GPGME_SIG_MODE_NORMAL, s_result); @@ -85,13 +136,13 @@ TEST_F(GpgCoreTest, CoreSignVerifyNormalTest) { } TEST_F(GpgCoreTest, CoreSignVerifyDetachTest) { - auto encrpyt_key = GpgKeyGetter::GetInstance(default_channel) + auto encrypt_key = GpgKeyGetter::GetInstance(default_channel) .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1"); ByteArray sign_text = "Hello GpgFrontend!"; ByteArrayPtr sign_out_data; GpgSignResult s_result; KeyListPtr keys = std::make_unique<KeyArgsList>(); - keys->push_back(std::move(encrpyt_key)); + keys->push_back(std::move(encrypt_key)); auto err = BasicOperator::GetInstance(default_channel) .Sign(std::move(keys), sign_text, sign_out_data, GPGME_SIG_MODE_DETACH, s_result); @@ -134,12 +185,12 @@ TEST_F(GpgCoreTest, CoreSignVerifyClearTest) { } TEST_F(GpgCoreTest, CoreEncryptSignDecrVerifyTest) { - auto encrpyt_key = GpgKeyGetter::GetInstance(default_channel) + auto encrypt_key = GpgKeyGetter::GetInstance(default_channel) .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1"); auto sign_key = GpgKeyGetter::GetInstance(default_channel) .GetKey("8933EB283A18995F45D61DAC021D89771B680FFB"); // Question? - // ASSERT_FALSE(encrpyt_key.is_private_key()); + // ASSERT_FALSE(encrypt_key.is_private_key()); ASSERT_TRUE(sign_key.is_private_key()); ASSERT_TRUE(sign_key.CanSignActual()); ByteArray encrypt_text = "Hello GpgFrontend!"; @@ -149,7 +200,7 @@ TEST_F(GpgCoreTest, CoreEncryptSignDecrVerifyTest) { KeyListPtr keys = std::make_unique<KeyArgsList>(), sign_keys = std::make_unique<KeyArgsList>(); - keys->push_back(std::move(encrpyt_key)); + keys->push_back(std::move(encrypt_key)); sign_keys->push_back(std::move(sign_key)); auto err = BasicOperator::GetInstance(default_channel) |