1
0
GpgFrontend/test/GpgCoreTestKeyModel.cpp

171 lines
5.9 KiB
C++

/**
* Copyright (C) 2021 Saturneric
*
* This file is part of GpgFrontend.
*
* GpgFrontend is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GpgFrontend is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
*
* The initial version of the source code is inherited from
* the gpg4usb project, which is under GPL-3.0-or-later.
*
* All the source code of GpgFrontend was modified and released by
* Saturneric<eric@bktus.com> starting on May 12, 2021.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#include "GpgFrontendTest.h"
#include "gpg/function/GpgKeyGetter.h"
TEST_F(GpgCoreTest, CoreInitTest) {
auto& ctx = GpgFrontend::GpgContext::GetInstance(default_channel);
auto& ctx_default = GpgFrontend::GpgContext::GetInstance();
ASSERT_TRUE(ctx.good());
ASSERT_TRUE(ctx_default.good());
}
TEST_F(GpgCoreTest, GpgDataTest) {
auto data_buff = std::string(
"cqEh8fyKWtmiXrW2zzlszJVGJrpXDDpzgP7ZELGxhfZYFi8rMrSVKDwrpFZBSWMG");
GpgFrontend::GpgData data(data_buff.data(), data_buff.size());
auto out_buffer = data.Read2Buffer();
ASSERT_EQ(out_buffer->size(), 64);
}
TEST_F(GpgCoreTest, GpgKeyTest) {
auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
.GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
ASSERT_TRUE(key.good());
ASSERT_TRUE(key.is_private_key());
ASSERT_TRUE(key.has_master_key());
ASSERT_FALSE(key.disabled());
ASSERT_FALSE(key.revoked());
ASSERT_EQ(key.protocol(), "OpenPGP");
ASSERT_EQ(key.subKeys()->size(), 2);
ASSERT_EQ(key.uids()->size(), 1);
ASSERT_TRUE(key.can_certify());
ASSERT_TRUE(key.can_encrypt());
ASSERT_TRUE(key.can_sign());
ASSERT_FALSE(key.can_authenticate());
ASSERT_TRUE(key.CanEncrActual());
ASSERT_TRUE(key.CanEncrActual());
ASSERT_TRUE(key.CanSignActual());
ASSERT_FALSE(key.CanAuthActual());
ASSERT_EQ(key.name(), "GpgFrontendTest");
ASSERT_TRUE(key.comment().empty());
ASSERT_EQ(key.email(), "gpgfrontend@gpgfrontend.pub");
ASSERT_EQ(key.id(), "81704859182661FB");
ASSERT_EQ(key.fpr(), "9490795B78F8AFE9F93BD09281704859182661FB");
ASSERT_EQ(key.expires(),
boost::posix_time::from_iso_string("20230905T040000"));
ASSERT_EQ(key.pubkey_algo(), "RSA");
ASSERT_EQ(key.length(), 3072);
ASSERT_EQ(key.last_update(),
boost::posix_time::from_iso_string("19700101T000000"));
ASSERT_EQ(key.create_time(),
boost::posix_time::from_iso_string("20210905T060153"));
ASSERT_EQ(key.owner_trust(), "Unknown");
using namespace boost::posix_time;
ASSERT_EQ(key.expired(), key.expires() < second_clock::local_time());
}
TEST_F(GpgCoreTest, GpgSubKeyTest) {
auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
.GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
auto sub_keys = key.subKeys();
ASSERT_EQ(sub_keys->size(), 2);
auto& sub_key = sub_keys->back();
ASSERT_FALSE(sub_key.revoked());
ASSERT_FALSE(sub_key.disabled());
ASSERT_EQ(sub_key.timestamp(),
boost::posix_time::from_iso_string("20210905T060153"));
ASSERT_FALSE(sub_key.is_cardkey());
ASSERT_TRUE(sub_key.is_private_key());
ASSERT_EQ(sub_key.id(), "2B36803235B5E25B");
ASSERT_EQ(sub_key.fpr(), "50D37E8F8EE7340A6794E0592B36803235B5E25B");
ASSERT_EQ(sub_key.length(), 3072);
ASSERT_EQ(sub_key.pubkey_algo(), "RSA");
ASSERT_FALSE(sub_key.can_certify());
ASSERT_FALSE(sub_key.can_authenticate());
ASSERT_FALSE(sub_key.can_sign());
ASSERT_TRUE(sub_key.can_encrypt());
ASSERT_EQ(key.expires(),
boost::posix_time::from_iso_string("20230905T040000"));
using namespace boost::posix_time;
ASSERT_EQ(sub_key.expired(), sub_key.expires() < second_clock::local_time());
}
TEST_F(GpgCoreTest, GpgUIDTest) {
auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
.GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
auto uids = key.uids();
ASSERT_EQ(uids->size(), 1);
auto& uid = uids->front();
ASSERT_EQ(uid.name(), "GpgFrontendTest");
ASSERT_TRUE(uid.comment().empty());
ASSERT_EQ(uid.email(), "gpgfrontend@gpgfrontend.pub");
ASSERT_EQ(uid.uid(), "GpgFrontendTest <gpgfrontend@gpgfrontend.pub>");
ASSERT_FALSE(uid.invalid());
ASSERT_FALSE(uid.revoked());
}
TEST_F(GpgCoreTest, GpgKeySignatureTest) {
auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
.GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
auto uids = key.uids();
ASSERT_EQ(uids->size(), 1);
auto& uid = uids->front();
auto signatures = uid.signatures();
ASSERT_EQ(signatures->size(), 1);
auto& signature = signatures->front();
ASSERT_EQ(signature.name(), "GpgFrontendTest");
ASSERT_TRUE(signature.comment().empty());
ASSERT_EQ(signature.email(), "gpgfrontend@gpgfrontend.pub");
ASSERT_EQ(signature.keyid(), "81704859182661FB");
ASSERT_EQ(signature.pubkey_algo(), "RSA");
ASSERT_FALSE(signature.revoked());
ASSERT_FALSE(signature.invalid());
ASSERT_EQ(GpgFrontend::check_gpg_error_2_err_code(signature.status()),
GPG_ERR_NO_ERROR);
ASSERT_EQ(signature.uid(), "GpgFrontendTest <gpgfrontend@gpgfrontend.pub>");
}
TEST_F(GpgCoreTest, GpgKeyGetterTest) {
auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
.GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
ASSERT_TRUE(key.good());
auto keys =
GpgFrontend::GpgKeyGetter::GetInstance(default_channel).FetchKey();
ASSERT_GE(keys->size(), secret_keys_.size());
ASSERT_TRUE(find(keys->begin(), keys->end(), key) != keys->end());
}