merged in default

generate_api
commit 950339c932
  1. 92
      src/pgp_gpg.c
  2. 4
      src/pgp_gpg_internal.h
  3. 4
      test/convenience_scripts/keygen_for_test.py
  4. 29
      test/include/SubkeyRatingEvalTests.h
  5. 2
      test/src/EngineTestSuite.cc
  6. 22
      test/src/SuiteMaker.cc
  7. 179
      test/src/engine_tests/SubkeyRatingEvalTests.cc
  8. 20
      test/test_keys/priv/crappykey_0-26F88D0B_priv.asc
  9. 49
      test/test_keys/priv/crappykey_1-0xC508F2B1_priv.asc
  10. 18
      test/test_keys/priv/crappykey_2-0xC027262F_priv.asc
  11. 32
      test/test_keys/priv/subkey_select_0-0x4929DC45_priv.asc
  12. 52
      test/test_keys/priv/subkey_select_1-0xF2BFF59E_priv.asc
  13. 43
      test/test_keys/priv/subkey_select_2-0xBAD7800C_priv.asc
  14. 68
      test/test_keys/priv/subkey_select_3-0x34F44C02_priv.asc
  15. 49
      test/test_keys/priv/subkey_select_4-0x6E6C7B8A_priv.asc
  16. 73
      test/test_keys/priv/subkey_select_5-0xD106E693_priv.asc
  17. 13
      test/test_keys/pub/crappykey_0-26F88D0B_pub.asc
  18. 28
      test/test_keys/pub/crappykey_1-0xC508F2B1_pub.asc
  19. 13
      test/test_keys/pub/crappykey_2-0xC027262F_pub.asc
  20. 18
      test/test_keys/pub/subkey_select_0-0x4929DC45_pub.asc
  21. 31
      test/test_keys/pub/subkey_select_1-0xF2BFF59E_pub.asc
  22. 28
      test/test_keys/pub/subkey_select_2-0xBAD7800C_pub.asc
  23. 46
      test/test_keys/pub/subkey_select_3-0x34F44C02_pub.asc
  24. 35
      test/test_keys/pub/subkey_select_4-0x6E6C7B8A_pub.asc
  25. 45
      test/test_keys/pub/subkey_select_5-0xD106E693_pub.asc

@ -361,6 +361,7 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first)
DLOAD(gpgme_signers_add);
DLOAD(gpgme_set_passphrase_cb);
DLOAD(gpgme_get_key);
DLOAD(gpgme_strerror);
#ifdef GPGME_VERSION_NUMBER
#if (GPGME_VERSION_NUMBER >= 0x010700)
@ -2141,31 +2142,63 @@ PEP_STATUS pgp_get_key_rating(
*comm_type = PEP_ct_key_revoked;
else if (key->expired)
*comm_type = PEP_ct_key_expired;
else if (!key->subkeys)
*comm_type = PEP_ct_key_b0rken;
else {
// Ok, so we now need to check subkeys. Normally, we could just
// shortcut this by looking at key->can_sign and key->can_encrypt,
// but we want the REASON we can't use a key, so this gets ugly.
PEP_comm_type max_comm_type = *comm_type;
PEP_comm_type best_sign = PEP_ct_no_encryption;
PEP_comm_type best_enc = PEP_ct_no_encryption;
// NOTE:
// PEP_ct_pEp functions here as an unreachable top;
// it is impossible on just a key.
// IF THIS CHANGES, we must choose something else.
PEP_comm_type worst_sign = PEP_ct_pEp;
PEP_comm_type worst_enc = PEP_ct_pEp;
PEP_comm_type error_sign = PEP_ct_unknown;
PEP_comm_type error_enc = PEP_ct_unknown;
// We require that the underlying client NOT force-use expired or revoked
// subkeys instead of a valid one.
//
// So here we check all the subkeys; we make note of the existence
// of an expired, revoked, or invalid subkey, in case there is no
// other alternative (we want to return useful information).
// At the same time, we try to evaluate the least strong useable keys
// for signing and encryption. If there is a useable one of both,
// the key comm_type corresponds to the lesser of these two least strong
// keys
for (gpgme_subkey_t sk = key->subkeys; sk != NULL; sk = sk->next) {
// Only evaluate signing keys or encryption keys
if (sk->can_sign || sk->can_encrypt) {
PEP_comm_type curr_sign = PEP_ct_no_encryption;
PEP_comm_type curr_enc = PEP_ct_no_encryption;
if (sk->length < 1024) {
#ifdef GPGME_PK_ECC
if ((sk->pubkey_algo != GPGME_PK_ECC && sk->length < 1024)
|| (sk->pubkey_algo == GPGME_PK_ECC && sk->length < 160)) {
#else
if (sk->length < 1024) {
#endif
if (sk->can_sign)
curr_sign = PEP_ct_key_too_short;
if (sk->can_encrypt)
curr_enc = PEP_ct_key_too_short;
}
else if (
((sk->pubkey_algo == GPGME_PK_RSA)
|| (sk->pubkey_algo == GPGME_PK_RSA_E)
|| (sk->pubkey_algo == GPGME_PK_RSA_S))
&& sk->length == 1024) {
else if
(
(((sk->pubkey_algo == GPGME_PK_RSA)
|| (sk->pubkey_algo == GPGME_PK_RSA_E)
|| (sk->pubkey_algo == GPGME_PK_RSA_S))
&& sk->length == 1024)
#ifdef GPGME_PK_ECC
|| (sk->pubkey_algo == GPGME_PK_ECC
&& sk->length == 160)
#endif
) {
if (sk->can_sign)
curr_sign = PEP_ct_OpenPGP_weak_unconfirmed;
if (sk->can_encrypt)
@ -2195,18 +2228,39 @@ PEP_STATUS pgp_get_key_rating(
if (sk->can_encrypt)
curr_enc = PEP_ct_key_revoked;
}
if (sk->can_sign)
best_sign = _MAX(curr_sign, best_sign);
if (sk->can_encrypt)
best_enc = _MAX(curr_enc, best_enc);
switch (curr_sign) {
case PEP_ct_key_b0rken:
case PEP_ct_key_expired:
case PEP_ct_key_revoked:
error_sign = curr_sign;
break;
default:
if (sk->can_sign)
worst_sign = _MIN(curr_sign, worst_sign);
break;
}
switch (curr_enc) {
case PEP_ct_key_b0rken:
case PEP_ct_key_expired:
case PEP_ct_key_revoked:
error_sign = curr_sign;
break;
default:
if (sk->can_encrypt)
worst_enc = _MIN(curr_enc, worst_enc);
break;
}
}
}
if (best_enc == PEP_ct_no_encryption ||
best_sign == PEP_ct_no_encryption) {
*comm_type = PEP_ct_key_b0rken;
if (worst_enc == PEP_ct_pEp ||
worst_sign == PEP_ct_pEp) {
// No valid key was found for one or both; return a useful
// error comm_type
PEP_comm_type error_ct = _MAX(error_enc, error_sign);
*comm_type = (error_ct == PEP_ct_unknown ? PEP_ct_key_b0rken : error_ct);
}
else {
*comm_type = _MIN(best_sign, _MIN(max_comm_type, best_enc));
*comm_type = _MIN(max_comm_type, _MIN(worst_sign, worst_enc));
}
}
break;

@ -83,6 +83,8 @@ typedef gpgme_error_t (*gpgme_op_edit_t)(gpgme_ctx_t CTX, gpgme_key_t KEY,
gpgme_edit_cb_t FNC, void *HANDLE, gpgme_data_t OUT);
typedef gpgme_ssize_t (*gpgme_io_write_t)(int fd, const void *buffer,
size_t count);
typedef const char*(*gpgme_strerror_t)(gpgme_error_t err);
#ifdef GPGME_VERSION_NUMBER
#if (GPGME_VERSION_NUMBER >= 0x010700)
@ -153,6 +155,8 @@ struct gpg_s {
gpgme_key_release_t gpgme_key_release;
gpgme_op_edit_t gpgme_op_edit;
gpgme_io_write_t gpgme_io_write;
gpgme_strerror_t gpgme_strerror;
gpgme_set_passphrase_cb_t gpgme_set_passphrase_cb;
};

@ -85,7 +85,7 @@ for i in range(num_keys):
pubkey = gpg.export_keys(fpr)
privkey = gpg.export_keys(fpr, True, passphrase="")
privkey = gpg.export_keys(fpr, True)
pubkey_filename = os.path.join(pub_path, key_filename_prefix + "pub.asc")
privkey_filename = os.path.join(priv_path, key_filename_prefix + "priv.asc")
@ -99,7 +99,7 @@ for i in range(num_keys):
privkey_file.close()
# Delete keys from keyring
gpg.delete_keys(fpr, True, passphrase="") # True => private keys
gpg.delete_keys(fpr, True) # True => private keys
gpg.delete_keys(fpr)
if (args.hgadd):

@ -0,0 +1,29 @@
// This file is under GNU General Public License 3.0
// see LICENSE.txt
#ifndef SUBKEY_RATING_EVAL_H
#define SUBKEY_RATING_EVAL_H
#include <string>
#include "EngineTestIndividualSuite.h"
using namespace std;
class SubkeyRatingEvalTests : public EngineTestIndividualSuite {
public:
SubkeyRatingEvalTests(string test_suite, string test_home_dir);
private:
void check_subkey_rating_eval();
void check_subkey_rating_eval_no_es();
void check_subkey_rating_eval_weak_s();
void check_subkey_rating_eval_ecc_s();
void check_subkey_rating_eval_weak_e_strong_ecc_se();
void check_subkey_rating_eval_bad_es();
void check_subkey_rating_eval_bad_e();
void check_subkey_rating_eval_bad_s_ecc_e();
void check_subkey_rating_eval_revoked_sign_no_alt();
void check_subkey_rating_eval_revoked_e_with_alt();
};
#endif

@ -104,7 +104,7 @@ void EngineTestSuite::set_full_env(const char* gpg_conf_copy_path, const char* g
#ifndef USE_NETPGP
success = system("gpgconf --kill all");
if (success != 0)
throw std::runtime_error("SETUP: Error when executing 'gpgconf --kill all'.");
throw std::runtime_error("SETUP: Error when executing 'gpgconf --kill all'.");
#endif
if (stat(test_home.c_str(), &dirchk) == 0) {

@ -21,6 +21,8 @@
#include "I18nTests.h"
#include "IdentityListTests.h"
#include "PgpBinaryTests.h"
#include "MistrustUndoTests.h"
#include "SubkeyRatingEvalTests.h"
#include "MessageNullFromTests.h"
#include "LeastCommonDenomColorTests.h"
#include "StringlistTests.h"
@ -29,11 +31,11 @@
#include "EncryptMissingPrivateKeyTests.h"
#include "CaseAndDotAddressTests.h"
#include "UserIDAliasTests.h"
#include "SignOnlyTests.h"
#include "BCCTests.h"
#include "Engine358Tests.h"
#include "BlacklistAcceptNewKeyTests.h"
#include "DecryptAttachPrivateKeyUntrustedTests.h"
#include "ReturnMistrustFprTests.h"
#include "BlacklistTests.h"
#include "RevokeRegenAttachTests.h"
#include "PepSubjectReceivedTests.h"
@ -53,7 +55,6 @@
#include "CrashdumpTests.h"
#include "StringpairListTests.h"
#include "EncryptForIdentityTests.h"
#include "KeyResetMessageTests.h"
#include "TrustManipulationTests.h"
#include "AppleMailTests.h"
@ -68,6 +69,8 @@ const char* SuiteMaker::all_suites[] = {
"I18nTests",
"IdentityListTests",
"PgpBinaryTests",
"MistrustUndoTests",
"SubkeyRatingEvalTests",
"MessageNullFromTests",
"LeastCommonDenomColorTests",
"StringlistTests",
@ -76,11 +79,11 @@ const char* SuiteMaker::all_suites[] = {
"EncryptMissingPrivateKeyTests",
"CaseAndDotAddressTests",
"UserIDAliasTests",
"SignOnlyTests",
"BCCTests",
"Engine358Tests",
"BlacklistAcceptNewKeyTests",
"DecryptAttachPrivateKeyUntrustedTests",
"ReturnMistrustFprTests",
"BlacklistTests",
"RevokeRegenAttachTests",
"PepSubjectReceivedTests",
@ -100,13 +103,12 @@ const char* SuiteMaker::all_suites[] = {
"CrashdumpTests",
"StringpairListTests",
"EncryptForIdentityTests",
"KeyResetMessageTests",
"TrustManipulationTests",
"AppleMailTests",
};
// This file is generated, so magic constants are ok.
int SuiteMaker::num_suites = 44;
int SuiteMaker::num_suites = 45;
void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_home, Test::Suite** test_suite) {
if (strcmp(test_class_name, "MimeTests") == 0)
@ -127,6 +129,10 @@ void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_
*test_suite = new IdentityListTests(test_class_name, test_home);
else if (strcmp(test_class_name, "PgpBinaryTests") == 0)
*test_suite = new PgpBinaryTests(test_class_name, test_home);
else if (strcmp(test_class_name, "MistrustUndoTests") == 0)
*test_suite = new MistrustUndoTests(test_class_name, test_home);
else if (strcmp(test_class_name, "SubkeyRatingEvalTests") == 0)
*test_suite = new SubkeyRatingEvalTests(test_class_name, test_home);
else if (strcmp(test_class_name, "MessageNullFromTests") == 0)
*test_suite = new MessageNullFromTests(test_class_name, test_home);
else if (strcmp(test_class_name, "LeastCommonDenomColorTests") == 0)
@ -143,8 +149,6 @@ void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_
*test_suite = new CaseAndDotAddressTests(test_class_name, test_home);
else if (strcmp(test_class_name, "UserIDAliasTests") == 0)
*test_suite = new UserIDAliasTests(test_class_name, test_home);
else if (strcmp(test_class_name, "SignOnlyTests") == 0)
*test_suite = new SignOnlyTests(test_class_name, test_home);
else if (strcmp(test_class_name, "BCCTests") == 0)
*test_suite = new BCCTests(test_class_name, test_home);
else if (strcmp(test_class_name, "Engine358Tests") == 0)
@ -153,6 +157,8 @@ void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_
*test_suite = new BlacklistAcceptNewKeyTests(test_class_name, test_home);
else if (strcmp(test_class_name, "DecryptAttachPrivateKeyUntrustedTests") == 0)
*test_suite = new DecryptAttachPrivateKeyUntrustedTests(test_class_name, test_home);
else if (strcmp(test_class_name, "ReturnMistrustFprTests") == 0)
*test_suite = new ReturnMistrustFprTests(test_class_name, test_home);
else if (strcmp(test_class_name, "BlacklistTests") == 0)
*test_suite = new BlacklistTests(test_class_name, test_home);
else if (strcmp(test_class_name, "RevokeRegenAttachTests") == 0)
@ -191,8 +197,6 @@ void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_
*test_suite = new StringpairListTests(test_class_name, test_home);
else if (strcmp(test_class_name, "EncryptForIdentityTests") == 0)
*test_suite = new EncryptForIdentityTests(test_class_name, test_home);
else if (strcmp(test_class_name, "KeyResetMessageTests") == 0)
*test_suite = new KeyResetMessageTests(test_class_name, test_home);
else if (strcmp(test_class_name, "TrustManipulationTests") == 0)
*test_suite = new TrustManipulationTests(test_class_name, test_home);
else if (strcmp(test_class_name, "AppleMailTests") == 0)

@ -0,0 +1,179 @@
// This file is under GNU General Public License 3.0
// see LICENSE.txt
#include <stdlib.h>
#include <string>
#include "pEpEngine.h"
#include <cpptest.h>
#include "test_util.h"
#include "EngineTestIndividualSuite.h"
#include "SubkeyRatingEvalTests.h"
using namespace std;
SubkeyRatingEvalTests::SubkeyRatingEvalTests(string suitename, string test_home_dir) :
EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_no_es"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_no_es)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_weak_s"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_weak_s)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_ecc_s"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_ecc_s)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_weak_e_strong_ecc_se"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_weak_e_strong_ecc_se)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_bad_es"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_bad_es)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_bad_e"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_bad_e)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_bad_s_ecc_e"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_bad_s_ecc_e)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_sign_no_alt"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_sign_no_alt)));
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_e_with_alt"),
static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_e_with_alt)));
}
// pub rsa2048 2019-01-21 [CA]
// F0D03C842C0770C2C2A9FEAF2A1ED9814929DC45
// uid [ unknown] Subkey Check 0 <subkey_select_0@darthmama.cool>
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_no_es() {
slurp_and_import_key(session, "test_keys/pub/subkey_select_0-0x4929DC45_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "F0D03C842C0770C2C2A9FEAF2A1ED9814929DC45", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_key_b0rken, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa2048 2019-01-21 [CEA]
// 918AF6E986F39B630541E10DF5F7FA35F2BFF59E
// uid [ unknown] Subkey Check 1 <subkey_select_1@darthmama.cool>
// sub rsa1024 2019-01-21 [S]
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_weak_s() {
slurp_and_import_key(session, "test_keys/pub/subkey_select_1-0xF2BFF59E_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "918AF6E986F39B630541E10DF5F7FA35F2BFF59E", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_weak_unconfirmed, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa2048 2019-01-21 [CEA]
// 8894202E3D791C95560058BD77676BACBAD7800C
// uid [ unknown] Subkey Check 2 <subkey_select_2@darthmama.cool>
// sub ed25519 2019-01-21 [S]
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_ecc_s() {
slurp_and_import_key(session, "test_keys/pub/subkey_select_2-0xBAD7800C_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "8894202E3D791C95560058BD77676BACBAD7800C", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_unconfirmed, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa2048 2019-01-21 [CA]
// 5EA5F7F71BB39B4F7924D1E8D11C676134F44C02
// uid [ unknown] Subkey Check 3 <subkey_select_3@darthmama.cool>
// sub ed25519 2019-01-21 [S]
// sub cv25519 2019-01-21 [E]
// sub rsa1024 2019-01-21 [E]
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_weak_e_strong_ecc_se() {
slurp_and_import_key(session, "test_keys/pub/subkey_select_3-0x34F44C02_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "5EA5F7F71BB39B4F7924D1E8D11C676134F44C02", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_weak_unconfirmed, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa512 2019-01-22 [SC]
// 70376BC88DE2DAB4BEF831B65FD6F65326F88D0B
// uid [ unknown] Weak RSA Key <crappykey_0@darthmama.cool>
// sub rsa512 2019-01-22 [E]
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_bad_es() {
slurp_and_import_key(session, "test_keys/pub/crappykey_0-26F88D0B_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "70376BC88DE2DAB4BEF831B65FD6F65326F88D0B", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_key_too_short, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa512 2019-01-22 [C]
// F712B88AF525E4E32A2A24BCD1B86137C508F2B1
// uid [ unknown] Weak RSA Key <crappykey_1@darthmama.cool>
// sub rsa512 2019-01-22 [E]
// sub rsa2048 2019-01-22 [S]
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_bad_e() {
slurp_and_import_key(session, "test_keys/pub/crappykey_1-0xC508F2B1_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "F712B88AF525E4E32A2A24BCD1B86137C508F2B1", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_key_too_short, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa512 2019-01-22 [SC]
// 18544492055207B2936BB215325776FBC027262F
// uid [ unknown] Weak RSA Key <crappykey_2@darthmama.cool>
// sub cv25519 2019-01-22 [E]
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_bad_s_ecc_e() {
slurp_and_import_key(session, "test_keys/pub/crappykey_2-0xC027262F_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "18544492055207B2936BB215325776FBC027262F", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_key_too_short, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa2048 2019-01-21 [CEA]
// 1E0D278644E2E293A9E953D9AC97F67F6E6C7B8A
// uid [ unknown] Subkey Check 4 <subkey_select_4@darthmama.cool>
// The following key was revoked on 2019-01-22 by RSA key AC97F67F6E6C7B8A Subkey Check 4 <subkey_select_4@darthmama.cool>
// ssb ed25519/7A03BDF88893985F
// created: 2019-01-22 revoked: 2019-01-22 usage: S
// [ unknown] (1). Subkey Check 4 <subkey_select_4@darthmama.cool>
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_sign_no_alt() {
slurp_and_import_key(session, "test_keys/pub/subkey_select_4-0x6E6C7B8A_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "1E0D278644E2E293A9E953D9AC97F67F6E6C7B8A", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_key_revoked, tl_ct_string(ct));
TEST_ASSERT(true);
}
// pub rsa2048 2019-01-21 [SCA]
// A2C00B12660CCB5759E6BF1854315D29D106E693
// uid [ unknown] Subkey Check 5 <subkey_select_5@darthmama.cool>
// sub cv25519 2019-01-22 [E]
//
// sec rsa2048/54315D29D106E693
// created: 2019-01-21 expires: never usage: SCA
// trust: unknown validity: unknown
// The following key was revoked on 2019-01-22 by RSA key 54315D29D106E693 Subkey Check 5 <subkey_select_5@darthmama.cool>
// ssb rsa2048/B16DED0A115801B4
// created: 2019-01-22 revoked: 2019-01-22 usage: E
// ssb cv25519/01B398B420DC3B57
// created: 2019-01-22 expires: never usage: E
// [ unknown] (1). Subkey Check 5 <subkey_select_5@darthmama.cool>
//
void SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_e_with_alt() {
slurp_and_import_key(session, "test_keys/pub/subkey_select_5-0xD106E693_pub.asc");
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "A2C00B12660CCB5759E6BF1854315D29D106E693", &ct);
TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_unconfirmed, tl_ct_string(ct));
TEST_ASSERT(true);
}

@ -0,0 +1,20 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
lPgEXEbjwgECAKrQi4nib3fj2QJEFB21fxYXSH0AP48OrK5am/fHIZnorQGQInVE
7/Z3DWLguO6JVGgL22T4HQyHFhq4PCed0r0AEQEAAQAB/R75v3wrJFSk7Gr1RoKW
saujYEFOxLfgDN93TfZSVZ0PoPLMSuuACVlJnisolvy+qzO43Ijur0h5u9NCs4fR
tx8BAL3634H04e01CgDb0IzOh8B0yZOxZT838T+DzOaA4NyHAQDmLKv1bhbClDZ8
xSCEwfTOMtLz0Ne893hU8novnC2LmwD6A68+ErYGMWXZBr4Hf00Nrfxqidh/AIMm
H6ZwLj278tRYzLQpV2VhayBSU0EgS2V5IDxjcmFwcHlrZXlfMEBkYXJ0aG1hbWEu
Y29vbD6IewQTAQIAJQUCXEbjwgUJAAAAAAIbAwYLAwcICQoGFQIICQoBBBYBAgAC
GQEACgkQX9b2Uyb4jQuJ/QH/Yub9iPjUXun8rHcerpT+44MeV5kA/N4HeQy8Ucdn
t5v+Y30HelR+NKtHgM3N9WlfnW0p3T9Gh1+huOxbuXOnY5z4BFxG48IBAgC6RCV1
28OxUGyMTu6ezqYB5ukTphHgEqPy7aI73EgxI7knLwGCSonliFaevk28GBiqssKZ
a4/1Xod/EuOsSgzFABEBAAEAAf4oZCmpZpgHhdScEmu9RTuLcwq854i9yd0Ci1Rg
XbLL8L/gae2bzzToknCZ00VqihWuw4dMqreV+HptAc2VetnbAQDQRgK1HO5ZeVYV
+Cz0pM/sAo/eP4QXFo2/bJvGqB2HYwEA5PMeOrq2N5P5F6NRkQtm5s/VnNMiohme
ps9xDyQIN7cA/0uYDVxvxMF3DqMDsa+LQ2a1Pz4ZoMJRnMv76bZYQ00DUyGIXwQY
AQIACQUCXEbjwgIbDAAKCRBf1vZTJviNC4O3AgChC8ynK4r5FjXr3pgQMffw3VPI
sGgUyZGkTiOzRvgla2vnm7JBackX0zgWYeKYT91Z1YvUAgaXsOtg5+E/6/tK
=7Xzk
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,49 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
=TUJ0
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,18 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
lPgEXEblegECAKrUcuK2FN/qr6tg0OK4IpDky/kJExGaLGGds2LNqSTuTPCHCCQ/
2gbxFYS60M8oaXpax+EWI4sydMzQR4qXo10AEQEAAQAB/RVGHsaH+WKHRfg4Nts9
JiTYMWSikirbgdJoQro3tWxBQscwoD3fjvzM8QQ90uAI88PxckYr2HCr2X4rNdUt
jMsBAMQjgSRjk9ihXeJ3iR/TlY8woiBwnMYl+diahjghGGZ7AQDe94svWLqIW1YC
MSlAAQVtFnoeGKCt+eP+O5VLG0miBwD+PfDp9sJ4EOU07/QFZ8dF7W/LWj/ByzuM
Gccl9jgeMBZPW7QpV2VhayBSU0EgS2V5IDxjcmFwcHlrZXlfMkBkYXJ0aG1hbWEu
Y29vbD6IewQTAQIAJQUCXEblegUJAAAAAAIbAwYLAwcICQoGFQIICQoBBBYBAgAC
GQEACgkQMld2+8AnJi8WIgH/TQE605yPZac0fEvzuCTl+k/vOCP1P1FkfsbUm+rz
vMnrslso3UFLJIclO9rmQQINl307+fRLXbuZ1Oy34wgtA5xdBFxG5xASCisGAQQB
l1UBBQEBB0Cug/QGjM5TjeKyg6niEHNv+DQZLCdFd49RHzSk896aVAMBCAcAAP9u
ON2eSiUMGZZUPvY7W9qMQ5mt4MAYsZjuG6xw6Rdo4BDFiHYEGAEIACAWIQQYVESS
BVIHspNrshUyV3b7wCcmLwUCXEbnEAIbDAAKCRAyV3b7wCcmL0ZzAgCQqosUluGK
Yn0mLBLLD6Ryhh1YAkehYyzdchOAZdDgK2vqHG4BIFmPVvdTDYtbFeZ3mqqcjs7r
1UXZAJtYuPO+
=2i1A
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,32 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
lQOYBFxGBkEBCACxp7qY+FhxQmHicXiVNz65bZxnu8E72iGseEXctVJGv/F3J8DO
RU2mJ+VbKkx3levnCTQPx3Vwg77PSZyu8TJN/Nex9xSypTDo6fMtdOSWLgcKIyIZ
+fcsW61cSs7xgqdx/JaNzmfmXEe7OwoXi0I99BVX//uz1ZWK7nj/YiJs+xuTo5S0
lgWNQ+h0CrbSu4jT8ANMhCHCtqz+biFYATV70Rv3RNz0yVijYQ3h4tuwdONfo9gH
BAoESdhEdk12LJGrgvnY5FKOrx9Q0oHxdmM8Qg66pwd32pram0jeg0cQ3SK8VmBP
vfo24gtKsn4f0oy0jYuxWEgOK1BjNKgepF6FABEBAAEAB/sEgHxbR4HQPu8lkpwM
ZfW+M6+gtlKPfnfXe8XDccnXtqH7E8QQRhPRZ9XpUUFWT3OGq4ZI9xQ8CW6iqJoi
mcSdUtCxdxIsc8CxSkpqBroLLzfo8xp4X4v6sQkL225yks3E9vJmvgoGfaSoszaO
ga4oTUDkNb2uYTV0q5Xf3OAD9G82AXDWrjFuSo+f9/XZ/i1hTQFq83uL/KwB9zrg
V+sY6zvWKKsNngNLLGOjsA/2tE6HynVH2CTNHB36zVXdIGnof7EvTeFTCOj+z8k/
Npqr+05fr4HV7rb3q4Nney+sGyOLk/viE9zxss0nNeHPBflZiAjpUh0B82g9zXVh
LqO5BADEGHtLxqDczaIRVIfvZF4cGcDgJ7Qe1qd2j4CWhh1j57WkRXFDTxvgxL2T
E+HkSwmCLjjgzfLlxhzAQ37WmewIG3xPNCyl1HF4bzWpbJIl7NShk7W9L9FAPlq5
YIcF2gb/GO/nsVQSI4IJ4DqltNUpm6yBhKnbk03tCD9GIACiOQQA5+0gN1aKqjI0
D9g+P/FiuU2kwacBVr6NYgkncupuVD5P1pa8BYGY04UgwNBwZDi2rtRkSa8AUS0d
71wie/3aGeV8Ns1m/1MyH+4ERQAUARpAA4YllNIlCe6buic5nsZqSjf+Y6UyXyUa
Rtt9vRJF5PcjfGt+FiXJ5btFDH+Urq0D/RjpSIodnM51YVznd24pZfDDHOQRE/O7
zKGbykPghH3zv79ZBK7tWEas87UnGWgj7F5RPF+zg6AE6pPWp2z8DYFHJ1ru5f+3
C/BiyzTQgkZCLccFgh+xPgwpn0YlsmO86zTqGiRZidkV5UP3hpNpW46S9NplJP51
9EUM6itNccJLP5u0L1N1YmtleSBDaGVjayAwIDxzdWJrZXlfc2VsZWN0XzBAZGFy
dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
8NA8hCwHcMLCqf6vKh7ZgUkp3EUFAlxGCMQCGyEACgkQKh7ZgUkp3EVWRAf+MCTJ
Z/gIitYdJsGoYIEm4bs1JO+/lKZFSLoCtxtcIIFBDqsVhitDC0UtNyuD7TRXanNL
XirlOTN/uYKzP/IFiU+q0KoKihNWn7gK7tPdAQ5uwQZb/7omUZScnfPieurPuKAS
H4q5XGcqecET05FE/JORxEh57aD3/ILW1AakEeKgfC240Z8pEO5bTMda3BV6Va0H
GaHsq6GylvzKj2FmcxpbBbrUjxvat4oshTNReYHL2C3i4S4hALJCLO2/8pQzNqof
itRkn32oR7+PyYgXY2nnjPO7+Mr6J9Jgr237mzBeq/dAt4qlY5VI8tD1LfVh62tq
y96bbenIL8D8xOHWDQ==
=Aa/E
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,52 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
kTdnvrwnWuCV33IV6KVBaQNojRlZ
=DSim
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,43 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
TmswobwksQ==
=c+dd
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,68 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
+rtx
=IIBT
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,49 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
lQOYBFxGBlIBCADQ0BAuaVLY6qVfirbMzGVE9o7T9vJcRuLU5UaQe2xVS/qswu6T
q078R4ItAOItaSUhP081MMZNHCZmMHtJvnkgGCQfGdUnUntbx/McetnNHanXOFtX
51H6rBT2t+0kFQ1FcofG3jXlOgEi3ISqv2MBfkhFG+feVmc1uCcxp4A2pFp+cLhv
nWIJ7ksvKyGM+tbQOIpY+ylYcFWDqCzSZ2nv97U0GMVY4cuKEZpGB8ArPec8X7EM
WSbM6rCHsWSdIO4XrwYazQZeBnIUAN44h76SkSdNuSqJgasXNmJFaMoZtZ8JrcCQ
Zrre+z6CBDr+Zsn5PoqK16TcYZKxRv1Q5MczABEBAAEAB/9lMJ7WzuV+Bt/TF/aT
8m0U6WK3p1E1lIhx4RW8CIOsJiC5PdG9r+Ob789OncH9fZmnrfVlclh2n7CgDtiA
GRS7j9dZVvxrjNYI2TGf2IzZkIlwqXfidk/M6T1TfjgmJymCQQk5Pw/hIKXSTgjg
cdS5sYe2LdrEbRyg9LfRoTlJwKTpdBZQcBbHUIuYWij0HMabOPW2ZgJKTgGdzLuo
UdIHTlCraovpSX+LF+AMQmMbQXVuSnO8bvSSENe24xHeOv7hA6QtH9E2puQQTqR9
cAPVrcNa1rBg8pWi9EeqwocSMz/Pj3dKj4sF53xK/JSrmzL6ArNguZUQwJziQZ2/
M6c5BADVfcJ2dDMBNoWacStxETAJMK0msIg5JD3fGckaEFAnuuM3U5GDrQfD+Ipo
WpUsEJwohEvjU9vihiFHz0nO9x5jB1oKoHM3Kq34xBlh4B9jJC+pbJptVGi10nPB
pzbO9f0A6xbTJljVxv5HUESoFwaICbwm+CWR/CSqMglUJD+rbwQA+mPT0H/NJPKX
3MVFgj7COpiPMciUyaeyVIclIh0HJHhqmryPSliQrbHjctsOgHy1vwLhtMHwX6Jm
w48Brt411SZRP6pUBOGPkjO100mYlxlX9rRbziVY3/GVHqWTyG6Lzt9HTg/bNmgR
MkaHpLNJ7LliYHM6F4AFFSmXgWVyDn0D/0zjTLGWQL22TmtzlqDPq8twgzrKqyVR
Y5LBz8U8stfcBy/8GUWy3bWgp6mUTOywzolR2CXK4qf0Lkie9Ooi7veo2hRNyogq
QHsy8IGtD2KgwDFrGRHD6K3eES/kbiqQvGPKc8z8JkChYFk9nzANbkj/UILz/6YL
Oqh4mCfqAJnPQke0L1N1YmtleSBDaGVjayA0IDxzdWJrZXlfc2VsZWN0XzRAZGFy
dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
Hg0nhkTi4pOp6VPZrJf2f25se4oFAlxG8bsCGy0ACgkQrJf2f25se4rBFgf9GFyV
dylvzmkeHcf2AyL/+9xXtwhIowp45RWBwyYum4kpbeHa7pBBBCYthDRFpIE+G22M
Cf1cPEjoGqvRbBO2AusozVeqQ2kQ4+Cb2aC8I2Em5+7aFgUSN0VLEKi/9n8eMu0z
WBVZo+QCGOXAZ03tlvatBd+awNniXQii3G49roOdGzdv5v4hA/hyCl3IqIaJIpRK
z1gEh8EpkapJveTYCVH7azZZubunX1O7cOuDxs5IOZWQBijiXA6jXsqMI06VJjX/
UVeUViQbywmlTjnRwImAyZsWPDByCPR362Ar+Y4k1iwgw9TDnqmnWiCBT6NwaWFl
VjmCWavVGuU/tUWjm5xYBFxG8cAWCSsGAQQB2kcPAQEHQPT1C2N0d7S7xVo9hp05
oHdabF9O7OFbOFzljC3GdIwdAAEA6IiGfhtMFvL94/W+dVe2k55WJ7PAWq+exSR3
/7oEgboSGYkBNgQoAQgAIBYhBB4NJ4ZE4uKTqelT2ayX9n9ubHuKBQJcRvHzAh0D
AAoJEKyX9n9ubHuKvy8IAKFdb4EAiNZ2Knpu7veEJUtHFU5RqK2n36Yt5uOWyYlm
lMvIvfdnnWyLZo8n9V7ZviWbzIOQyljQC+8AGEWzmfe8588cFiSmAO3Z+vgL3Gtp
9y7DOerGQK1l8VZDTthv9k00QiWlSYRNSiaX51eNuCX6e0/tm2zM/eSZT3lmgFgf
qFm57S3cVcrb0hOp0gVEV7KyOWTd6fVwHOoH0SQJMEhv5QiWe+1bN4sj35mSD/bm
FFhJzGBytC5XxmaFy5y5Ej/M36gTOd29R47yHp9+CcxrPJlBv/ulRT96aitx8+PX
plQiPjA1gqf2wLaijrG3Z7CKTw7P9X13r3TYAMu/slGJAa0EGAEIACAWIQQeDSeG
ROLik6npU9msl/Z/bmx7igUCXEbxwAIbAgCBCRCsl/Z/bmx7inYgBBkWCAAdFiEE
9tfb6mpSSdbhzcPaegO9+IiTmF8FAlxG8cAACgkQegO9+IiTmF/5ywD/ZNFuYrMq
2h4LE7XffiBwbvUbdQ17ybLHfkM8gDQvJKsA+wZjliNP9bpN6hZG6YyDvPOSQq6l
YoPbd1gou4NRyTMAVGQH/jzh+PV96UJCvCKJWaEr9yGWPWkgSa2Ebw1mNzB2maW+
NT83Ywckd61747dghmz5ETuXfFKXGp3nW2f7ozDs2Y8P1Yh6xMge1JN66ZDPd68J
Z2OawG5i0r1/9hXWKrcJQQALkzYTFij1IjZQEMiQ/1sgAAybLHPVOeXv7o1F5EZ6
sCQybQ7RCTFLRkEFjc2OjIeH3+NMMdibEPSEtxBz5Q+kW/dB9c4EGNplVuDSC89V
iCC+NDSi4h97dPu3ZWY6SL2+4K5lOEoVD5XB7rBDHaT4h8BvGe7l9Box0W/y4pXj
8NePc/YZfuEATtasqfObSTShXTQf2HIJgGwuxXXAQp0=
=mMuL
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,73 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
WaU=
=Q5MA
-----END PGP PRIVATE KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mE0EXEbjwgECAKrQi4nib3fj2QJEFB21fxYXSH0AP48OrK5am/fHIZnorQGQInVE
7/Z3DWLguO6JVGgL22T4HQyHFhq4PCed0r0AEQEAAbQpV2VhayBSU0EgS2V5IDxj
cmFwcHlrZXlfMEBkYXJ0aG1hbWEuY29vbD6IewQTAQIAJQUCXEbjwgUJAAAAAAIb
AwYLAwcICQoGFQIICQoBBBYBAgACGQEACgkQX9b2Uyb4jQuJ/QH/Yub9iPjUXun8
rHcerpT+44MeV5kA/N4HeQy8Ucdnt5v+Y30HelR+NKtHgM3N9WlfnW0p3T9Gh1+h
uOxbuXOnY7hNBFxG48IBAgC6RCV128OxUGyMTu6ezqYB5ukTphHgEqPy7aI73Egx
I7knLwGCSonliFaevk28GBiqssKZa4/1Xod/EuOsSgzFABEBAAGIXwQYAQIACQUC
XEbjwgIbDAAKCRBf1vZTJviNC4O3AgChC8ynK4r5FjXr3pgQMffw3VPIsGgUyZGk
TiOzRvgla2vnm7JBackX0zgWYeKYT91Z1YvUAgaXsOtg5+E/6/tK
=x0Il
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,28 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mE0EXEblSgECANCN0ls7KiHjDvhNtjEXubECaeG6WUWyiVjylfGd5C3DkCpPw62j
C+5I5iTAwWqhgCYFXx2Taa5bZfxhkyc5sN0AEQEAAbQpV2VhayBSU0EgS2V5IDxj
cmFwcHlrZXlfMUBkYXJ0aG1hbWEuY29vbD6IkgQTAQgAPAUJAAAAAAYLAwcICQoG
FQIICQoBBBYBAgACGQEWIQT3EriK9SXk4yoqJLzRuGE3xQjysQUCXEbmRQIbAQAK
CRDRuGE3xQjysdbTAf9aljQ/Yin9nHuCp36NSJ6Pz0ojFH4U/X9bdg0ObJMy9nB2
kq52dToQVqAAeCrNoM72nUdYpMNK/gjUkAuZWJYCuE0EXEblSgECAKJ6vLeL3tz5
8A5Rp+xe/EfE1o/N3P3/75c2ESDSxQZS4E0zoZaQGOcdbhKwTAyhGqVUNaz29Fh6
P2Sx1XCMAiEAEQEAAYhfBBgBAgAJBQJcRuVKAhsMAAoJENG4YTfFCPKxvJ0B/2Up
jsZ2rfUzz4fL+i6xV5hLLtuGxfTmcSDCYxUO6oBSFixYOCKLJ8Pj4PPdXk2WwAR/
46hX7RiTwKG4VdwlzhC5AQ0EXEbmTQEIAN9yhr8bxHoO0UOcaer6bHnwdJgNmnqp
TprFy6/dQk0e5WQsSndqtjhbcM1bVPvtBN9TRNu2V5KskHkIGi9hT6tinwb8RpiM
mP2IqBB4TG775dDZFoPCIUgT2N9ttHMmEV5z1T3ihFrRZMgeK2tjFgY7prLm8SPJ
Yy8OHLXtZ1pgjGq/lfWr9FHi+aRPeS+kacSe5kbJdiBrTjQ2V/yXdEUJmX65YjFL
fh7/mWueMG1weyyM50EjTV/iD+5qLunYgU0KIeMwPEjqlGrj0JSNjhQL4W3SWK0B
2tu2zhT5BD+u0XDug+ZVR1n09HCcE95/BqIqpCf5TJxHswUqLH25dGkAEQEAAYkB
rAQYAQgAIBYhBPcSuIr1JeTjKiokvNG4YTfFCPKxBQJcRuZNAhsCAUAJENG4YTfF
CPKxwHQgBBkBCAAdFiEERGu+bZeUOk6WERPaRphZFzO/xKQFAlxG5k0ACgkQRphZ
FzO/xKSCpwgAvKNwZHlTAPkILWmappLE3r99hPfWVAE7p3i69T8rSf/7VhGQiOpF
yrw6u/BGVSWEQ+av0NdQIsxHCHu0fmV4PIhL8sRE2sP0/0yr6vdriJA5Bha43dv2
Iy/EIK4oZ2xwNhPL0l9Ww4d1tr1hX50TBoo0nV3qH6AYHYAebwGCghMhEkeVxH8P
zAKnh+qM8f8XpwaOAVmFRolg7GCNuDzNl07cyGkVcAqy/lsRNAEow+y3SA6Uhmbt
DoH2qTYOqYHh3Ntav9n5rTjwumiLLpbDNnIEnt2rIED48d3krokt/8kSNW1FXayb
ca51vA0r7m43UycutEJ9A4fEKzoHeGZkdKdqAgClDYMTn8TgJd01MSlkwhsqqeni
G/dEU0ZCptOaYs2GsGBobyz69d5LKTqcrEbuafP5MXilLOSQkcfPAxli7j0B
=3gub
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mE0EXEblegECAKrUcuK2FN/qr6tg0OK4IpDky/kJExGaLGGds2LNqSTuTPCHCCQ/
2gbxFYS60M8oaXpax+EWI4sydMzQR4qXo10AEQEAAbQpV2VhayBSU0EgS2V5IDxj
cmFwcHlrZXlfMkBkYXJ0aG1hbWEuY29vbD6IewQTAQIAJQUCXEblegUJAAAAAAIb
AwYLAwcICQoGFQIICQoBBBYBAgACGQEACgkQMld2+8AnJi8WIgH/TQE605yPZac0
fEvzuCTl+k/vOCP1P1FkfsbUm+rzvMnrslso3UFLJIclO9rmQQINl307+fRLXbuZ
1Oy34wgtA7g4BFxG5xASCisGAQQBl1UBBQEBB0Cug/QGjM5TjeKyg6niEHNv+DQZ
LCdFd49RHzSk896aVAMBCAeIdgQYAQgAIBYhBBhURJIFUgeyk2uyFTJXdvvAJyYv
BQJcRucQAhsMAAoJEDJXdvvAJyYvRnMCAJCqixSW4YpifSYsEssPpHKGHVgCR6Fj
LN1yE4Bl0OAra+ocbgEgWY9W91MNi1sV5neaqpyOzuvVRdkAm1i4874=
=ncwA
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,18 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFxGBkEBCACxp7qY+FhxQmHicXiVNz65bZxnu8E72iGseEXctVJGv/F3J8DO
RU2mJ+VbKkx3levnCTQPx3Vwg77PSZyu8TJN/Nex9xSypTDo6fMtdOSWLgcKIyIZ
+fcsW61cSs7xgqdx/JaNzmfmXEe7OwoXi0I99BVX//uz1ZWK7nj/YiJs+xuTo5S0
lgWNQ+h0CrbSu4jT8ANMhCHCtqz+biFYATV70Rv3RNz0yVijYQ3h4tuwdONfo9gH
BAoESdhEdk12LJGrgvnY5FKOrx9Q0oHxdmM8Qg66pwd32pram0jeg0cQ3SK8VmBP
vfo24gtKsn4f0oy0jYuxWEgOK1BjNKgepF6FABEBAAG0L1N1YmtleSBDaGVjayAw
IDxzdWJrZXlfc2VsZWN0XzBAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
BhUKCQgLAgQWAgMBAh4BAheAFiEE8NA8hCwHcMLCqf6vKh7ZgUkp3EUFAlxGCMQC
GyEACgkQKh7ZgUkp3EVWRAf+MCTJZ/gIitYdJsGoYIEm4bs1JO+/lKZFSLoCtxtc
IIFBDqsVhitDC0UtNyuD7TRXanNLXirlOTN/uYKzP/IFiU+q0KoKihNWn7gK7tPd
AQ5uwQZb/7omUZScnfPieurPuKASH4q5XGcqecET05FE/JORxEh57aD3/ILW1Aak
EeKgfC240Z8pEO5bTMda3BV6Va0HGaHsq6GylvzKj2FmcxpbBbrUjxvat4oshTNR
eYHL2C3i4S4hALJCLO2/8pQzNqofitRkn32oR7+PyYgXY2nnjPO7+Mr6J9Jgr237
mzBeq/dAt4qlY5VI8tD1LfVh62tqy96bbenIL8D8xOHWDQ==
=P4RS
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,31 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFxGBkcBCACzk5CHhKqW0iOYWLo82kQEg+SC61mnxZcwOpad008YbQB/LXRl
4vlxssfZy8upfazux7lMNvz+OlwmGWt+PiVUqZmfWtOkMtKajtXfOj2hXyKOvcib
P42N/D9EGXgo723XAnx0TRRjf2AmP/w/yHkORGBNnLLek6i5J73pnK2x6FtzKITw
8akrX3nwGVhC3DYd1Hf/pdTpl3mp8Lo6bI10rpSMmvcp4/Ie5uJ16LxO04loLAi5
Ic6Q4+YX5WOOPHvdY09w059MXZocuomEmdY8PIvoef954k4+KZWmYpf0SKYOscQc
uznCWTMAQAdRNDjvX49IswRZVBvJYVPHUDGpABEBAAG0L1N1YmtleSBDaGVjayAx
IDxzdWJrZXlfc2VsZWN0XzFAZGFydGhtYW1hLmNvb2w+iQFNBBMBCAA4BQsJCAcC
BhUKCQgLAgQWAgMBAh4BAheAFiEEkYr26Ybzm2MFQeEN9ff6NfK/9Z4FAlxGCiEC
Gy0ACgkQ9ff6NfK/9Z7IZgf4qLkKYeeqOmVk9HARqcyhYYhBrGOF4VaLVW5lJES5
IzK+kT9wc6V0qGrqTqHrlLRCATiVAths/Gyq+eUbHFT68WQ9+2BESyt9/dV36QQy
Q0tdgYK0x6G0anzUYjpwac1zW4M/v5mBDFqhTbfNO8FvRsU6Yctmgw07q3OFpZ6P
BAOXlfalICzZ2RNzRCEOvKhZMuzfUVH/GfXceXBDn5Db1jFkjh4RJCP0XUaAPV+p
w3bO2Sn9Ype3h0dqKE0G5K1QVKbMrH8LACR6WSXbGdjUyB+uXcqnUKBmaIS5p5oK
OMU+xaATM24t651FhOik7uS4gBdvREr6yp1ae05g04eTuI0EXEYKLgEEANrbMRIH
JsXVxPdCqgSgMwvKrS0k6OsRc8UeaQHxMFaNClBkPb2Nc+T5DcQ9UKfbEDegcOF6
hyQ6UglfbtriXat0NOrnBburwLdW7YoBcWayhUDu0QmhIPCb9Xcob8lkQmKzb6bP
85grYoHQWnLfNBfV9qcpHBV+jV2xrOEVCNtZABEBAAGJAesEGAEIACAWIQSRivbp
hvObYwVB4Q319/o18r/1ngUCXEYKLgIbAgC/CRD19/o18r/1nrQgBBkBCAAdFiEE
2aa+R0T4ySVerxrylG24itg63LgFAlxGCi4ACgkQlG24itg63LjdNAQA0AdVfpWI
XG1+VzWVHJ72j8lyQgpoG67UTPks1LZCXiAYLbAn8qOmd30qt75e7PWAfUvISlAU
883k4t+otn8JX3BjBYLwezdKhyWN5kZc6CVxth6TOeVhCyKfh5icfFipOJGEFsxc
Wq3JZtLu4a0mtNb8B3C7vu+dS5LJanv/Nw/CAAgAn+PfQS8Rrwt1ud+4BA/RiDqL
rAOaweAQnRb2l3X6V7vBGBSPnFuEEoLRd5Uqf+4OYICpEclLcZgHDQXcOFf9cKc8
D75OvtESoKNiEWPq+n6YjC+W+FC7s09/BF9gsM8DXq2LgLyTP7uwZM85j/VtGcZB
cNsQUxLyxTL18lxBjTJZXp2P2j/81+NZX1+6N2Omatf1SG2E8CMW+hcllszW+caX
uXq/LpkOw8btqS/tMZrIYhYyD8psWiyxJPZAjqq5fKvTh38bMCb2btGw4pDTlfaC
I4yRZA8UBoqxP/s0BR8XGtJ56sJZIIW+ZpE3Z768J1rgld9yFeilQWkDaI0ZWQ==
=tl7g
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,28 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFxGBkwBCACQa3Qt8LaXvGZ1WL7qJyjeKNd2xW5y6DO8+6Sm6AxEdRSkEg0w
DuceemwhCl8p/VlLsUsqnBXqxR6j4cKGQkSsmvZhZt6EFcPD9/OU1CovcbzylJd1
C8bxFypd2qVpOh0i0lOfhbrtbzCocoDVWZ4rfiMPUWy6E0HGfEcxU8GPMOSIsdbC
vnbZbZrgW8VK8f+vjn4FFrBtMF3Xs1LGwAuzSdTYW68Be7k3MkKKkJl0QrTEzIxo
IEO1EZStmo8VM8nGh0rLe+mQI9TaN/Jn3DCE4m4gmS37hyl4+MPkM7jEc1eJ8DAa
EYpnDoTAs58OBpuHBzsXXvFL/hA5U4rMl9mbABEBAAG0L1N1YmtleSBDaGVjayAy
IDxzdWJrZXlfc2VsZWN0XzJAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
BhUKCQgLAgQWAgMBAh4BAheAFiEEiJQgLj15HJVWAFi9d2drrLrXgAwFAlxGDH0C
Gy0ACgkQd2drrLrXgAwt4Qf/VbzQFNxLHFqi6x2mffvPR3gUtygMyv3EjlH8VOyD
uDmGu3nCm7Q4LdtjtVhDRYlmwaQHlVp2JxRWDVPUpru7fKxMxk7H39oGoh85VItJ
AyqZZhCbal2FM/W3j/+pnig0Q2kNoCVlD3WZg13Ejw/cw7z4zasaT+O2AJ9KzRNw
4Hk5FEnlhjuSCLdox/oMCe5RM5NmUazC5m4ejpqE/hryLzp10PjCMJCXz2fMrAWM
ZbVWB5vmioP6oR0UjiJdfnEPjjJ7L2w7A08j6kATh4+hPG2FXbox6J3tBJ1flwWc
ZGiTUYEzxPpq3ArOqUEypddkNdrshMQnwSjBJzdFlR4bebgzBFxGDDEWCSsGAQQB
2kcPAQEHQIxutjFIiJAtLbBcHCnXU2jM8JJ8Gz8aGeq2p9KnzVCriQGtBBgBCAAg
FiEEiJQgLj15HJVWAFi9d2drrLrXgAwFAlxGDDECGwIAgQkQd2drrLrXgAx2IAQZ
FggAHRYhBFYfy8bkKp+qd1l15MNU5VghHHKeBQJcRgwxAAoJEMNU5VghHHKeYUUA
/i9CMTiPeDX3rkNU+EwymZ8nWWE6apNkGMHuK8NYgM85AP99KrlJgtElgWcdPbtY
QW63QOXAO7z8gfGx7H8XTShDAtw8B/0djEwYkaKFoOg/MRRlcJMGGMKhUmlqHsk9
7k0rzQO1Gf4ea5DKgW7FQcspVBvlCRabx2JlCTT8t/YNp31Bm20PJwrkQp9tVYTp
OVLxsJsmQa6G0/ypwl49PkaWjXFCsnrgJvwyiHdeSKFaCBl2o7sQoQXGukPFsNcu
OirZ6Z0czdV+O0zCoub5MVtTWA33CiZZK5xOobnb4/Pih1rNEMLu+wfr6s+XjHKf
+CMEEmbwcXG/DV6GhM0WrFQ4iCJx+cNWwnNyffRwLQpg9EUpqXl0Ey6F0J6iApuP
r8c6yvkiI+dNeXeDuwcUgeYc+xgOz8IobCqROh4QWTNOazChvCSx
=xnz/
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,46 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
u3E=
=Pkm5
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,35 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFxGBlIBCADQ0BAuaVLY6qVfirbMzGVE9o7T9vJcRuLU5UaQe2xVS/qswu6T
q078R4ItAOItaSUhP081MMZNHCZmMHtJvnkgGCQfGdUnUntbx/McetnNHanXOFtX
51H6rBT2t+0kFQ1FcofG3jXlOgEi3ISqv2MBfkhFG+feVmc1uCcxp4A2pFp+cLhv
nWIJ7ksvKyGM+tbQOIpY+ylYcFWDqCzSZ2nv97U0GMVY4cuKEZpGB8ArPec8X7EM
WSbM6rCHsWSdIO4XrwYazQZeBnIUAN44h76SkSdNuSqJgasXNmJFaMoZtZ8JrcCQ
Zrre+z6CBDr+Zsn5PoqK16TcYZKxRv1Q5MczABEBAAG0L1N1YmtleSBDaGVjayA0
IDxzdWJrZXlfc2VsZWN0XzRAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
BhUKCQgLAgQWAgMBAh4BAheAFiEEHg0nhkTi4pOp6VPZrJf2f25se4oFAlxG8bsC
Gy0ACgkQrJf2f25se4rBFgf9GFyVdylvzmkeHcf2AyL/+9xXtwhIowp45RWBwyYu
m4kpbeHa7pBBBCYthDRFpIE+G22MCf1cPEjoGqvRbBO2AusozVeqQ2kQ4+Cb2aC8
I2Em5+7aFgUSN0VLEKi/9n8eMu0zWBVZo+QCGOXAZ03tlvatBd+awNniXQii3G49
roOdGzdv5v4hA/hyCl3IqIaJIpRKz1gEh8EpkapJveTYCVH7azZZubunX1O7cOuD
xs5IOZWQBijiXA6jXsqMI06VJjX/UVeUViQbywmlTjnRwImAyZsWPDByCPR362Ar
+Y4k1iwgw9TDnqmnWiCBT6NwaWFlVjmCWavVGuU/tUWjm7gzBFxG8cAWCSsGAQQB
2kcPAQEHQPT1C2N0d7S7xVo9hp05oHdabF9O7OFbOFzljC3GdIwdiQE2BCgBCAAg
FiEEHg0nhkTi4pOp6VPZrJf2f25se4oFAlxG8fMCHQMACgkQrJf2f25se4q/LwgA
oV1vgQCI1nYqem7u94QlS0cVTlGoraffpi3m45bJiWaUy8i992edbItmjyf1Xtm+
JZvMg5DKWNAL7wAYRbOZ97znzxwWJKYA7dn6+Avca2n3LsM56sZArWXxVkNO2G/2
TTRCJaVJhE1KJpfnV424Jfp7T+2bbMz95JlPeWaAWB+oWbntLdxVytvSE6nSBURX
srI5ZN3p9XAc6gfRJAkwSG/lCJZ77Vs3iyPfmZIP9uYUWEnMYHK0LlfGZoXLnLkS
P8zfqBM53b1HjvIen34JzGs8mUG/+6VFP3pqK3Hz49emVCI+MDWCp/bAtqKOsbdn
sIpPDs/1fXevdNgAy7+yUYkBrQQYAQgAIBYhBB4NJ4ZE4uKTqelT2ayX9n9ubHuK
BQJcRvHAAhsCAIEJEKyX9n9ubHuKdiAEGRYIAB0WIQT219vqalJJ1uHNw9p6A734
iJOYXwUCXEbxwAAKCRB6A734iJOYX/nLAP9k0W5isyraHgsTtd9+IHBu9Rt1DXvJ
ssd+QzyANC8kqwD7BmOWI0/1uk3qFkbpjIO885JCrqVig9t3WCi7g1HJMwBUZAf+
POH49X3pQkK8IolZoSv3IZY9aSBJrYRvDWY3MHaZpb41PzdjByR3rXvjt2CGbPkR
O5d8UpcanedbZ/ujMOzZjw/ViHrEyB7Uk3rpkM93rwlnY5rAbmLSvX/2FdYqtwlB
AAuTNhMWKPUiNlAQyJD/WyAADJssc9U55e/ujUXkRnqwJDJtDtEJMUtGQQWNzY6M
h4ff40wx2JsQ9IS3EHPlD6Rb90H1zgQY2mVW4NILz1WIIL40NKLiH3t0+7dlZjpI
vb7grmU4ShUPlcHusEMdpPiHwG8Z7uX0GjHRb/LilePw149z9hl+4QBO1qyp85tJ
NKFdNB/YcgmAbC7FdcBCnQ==
=hOhH
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,45 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
yJQVkPVZpQ==
=00b5
-----END PGP PUBLIC KEY BLOCK-----
Loading…
Cancel
Save