merged in sync

pEpMIME
commit d6596d3609

@ -1136,7 +1136,7 @@ static PEP_STATUS mime_html_text(
if (mime == NULL)
goto enomem;
pEp_rid_list_t* resource = new_rid_node(PEP_RID_FILENAME, "msg.txt");
pEp_rid_list_t* resource = NULL;
int encoding_type = (transport_encode ? MAILMIME_MECHANISM_QUOTED_PRINTABLE : 0);
submime = get_text_part(NULL, "text/plain", plaintext, strlen(plaintext),
@ -1725,13 +1725,13 @@ static PEP_STATUS mime_encode_message_plain(
else {
pEp_rid_list_t* resource = NULL;
if (is_PGP_message_text(plaintext)) {
resource = new_rid_node(PEP_RID_FILENAME, "msg.asc");
resource = NULL;
int encoding_type = (transport_encode ? MAILMIME_MECHANISM_7BIT : 0);
mime = get_text_part(resource, "application/octet-stream", plaintext,
strlen(plaintext), encoding_type);
}
else {
resource = new_rid_node(PEP_RID_FILENAME, "msg.txt");
resource = NULL;
int encoding_type = (transport_encode ? MAILMIME_MECHANISM_QUOTED_PRINTABLE : 0);
mime = get_text_part(resource, "text/plain", plaintext, strlen(plaintext),
encoding_type);
@ -1934,7 +1934,9 @@ PEP_STATUS _mime_encode_message_internal(
break;
case PEP_enc_PEP:
NOT_IMPLEMENTED
// today's pEp message format is PGP/MIME from the outside
status = mime_encode_message_PGP_MIME(msg, omit_fields, &mime);
break;
default:
NOT_IMPLEMENTED

@ -747,7 +747,7 @@ PEP_STATUS send_key_reset_to_recents(PEP_SESSION session,
assert(old_fpr);
assert(new_fpr);
assert(session);
assert(session->messageToSend);
// assert(session->messageToSend); NO. Don't assert this, FFS.
if (!session || !old_fpr || !new_fpr)
return PEP_ILLEGAL_VALUE;

@ -1074,8 +1074,6 @@ PEP_STATUS _myself(PEP_SESSION session,
char* default_own_id = NULL;
status = get_default_own_userid(session, &default_own_id);
bool no_uname_on_entry = EMPTYSTR(identity->username);
// Deal with non-default user_ids.
// FIXME: if non-default and read-only, reject totally?
if (default_own_id && strcmp(default_own_id, identity->user_id) != 0) {
@ -1199,15 +1197,7 @@ PEP_STATUS _myself(PEP_SESSION session,
free(identity->fpr);
identity->fpr = NULL;
char* namecache = NULL;
if (no_uname_on_entry) {
namecache = identity->username;
identity->username = NULL;
}
status = generate_keypair(session, identity);
if (namecache) {
identity->username = namecache;
}
assert(status != PEP_OUT_OF_MEMORY);
if (status != PEP_STATUS_OK) {

@ -3603,6 +3603,9 @@ static PEP_STATUS _decrypt_message(
&ptext, &psize, &_keylist,
NULL);
if (status == PEP_DECRYPT_NO_KEY)
signal_Sync_event(session, Sync_PR_keysync, CannotDecrypt, NULL);
if (status > PEP_CANNOT_DECRYPT_UNKNOWN)
goto pEp_error;
@ -3816,7 +3819,9 @@ static PEP_STATUS _decrypt_message(
bool ignore_msg = false;
if (is_key_reset) {
if (inner_message->_sender_fpr) {
if (decrypt_status == PEP_VERIFY_SIGNER_KEY_REVOKED)
ignore_msg = true;
else if (inner_message->_sender_fpr) {
bool sender_key_is_me = false;
status = is_own_key(session, inner_message->_sender_fpr, &sender_key_is_me);
if (status != PEP_STATUS_OK && status != PEP_KEY_NOT_FOUND)
@ -3834,7 +3839,7 @@ static PEP_STATUS _decrypt_message(
}
}
else
ignore_msg = true;
ignore_msg = true;
}
if (!ignore_msg) {
@ -3849,17 +3854,20 @@ static PEP_STATUS _decrypt_message(
private_il);
if (status != PEP_STATUS_OK)
goto pEp_error;
}
}
else {
// Simply put, we bail. We should not be returning ANYTHERE here.
status = decrypt_status;
goto pEp_error;
}
if (is_key_reset) {
if (decrypt_status == PEP_DECRYPTED || decrypt_status == PEP_DECRYPTED_AND_VERIFIED) {
if (!ignore_msg) {
status = receive_key_reset(session,
inner_message);
if (status != PEP_STATUS_OK) {
free_message(inner_message);
goto pEp_error;
}
}
status = receive_key_reset(session,
inner_message);
if (status != PEP_STATUS_OK) {
free_message(inner_message);
goto pEp_error;
}
*flags |= PEP_decrypt_flag_consume;
calculated_src = msg = inner_message;
}

@ -824,16 +824,19 @@ static PEP_STATUS upgrade_revoc_contact_to_13(PEP_SESSION session) {
// (one-to-one revoke-replace relationships), but since key reset
// hasn't been used in production, this is not a customer-facing
// issue.
int_result = sqlite3_exec(
session->db,
"alter table revocation_contact_list\n"
" add column own_address text;\n",
NULL,
NULL,
NULL
);
assert(int_result == SQLITE_OK);
// Note: the check upfront is to deal with partially-upgraded DB issues
if (!table_contains_column(session, "revocation_contact_list", "own_address")) {
int_result = sqlite3_exec(
session->db,
"alter table revocation_contact_list\n"
" add column own_address text;\n",
NULL,
NULL,
NULL
);
assert(int_result == SQLITE_OK);
}
// the best we can do here is search per address, since these
// are no longer associated with an identity. For now, if we find

@ -137,6 +137,8 @@ struct _pEpSession {
sqlite3_stmt *cert_save_insert_userids;
sqlite3_stmt *delete_keypair;
} sq_sql;
pgp_policy_t policy;
#endif
PEP_cryptotech_t *cryptotech;

File diff suppressed because it is too large Load Diff

@ -200,20 +200,16 @@ have found a dastardly bug in the engine, but it can also be a test issue.
When debugging a failing test, use '--gtest_break_on_failure' to have
gtest automatically break into the debugger where the assertion fails.
### Output
Compile tests with -DDEBUG_OUTPUT to (possibly) see output to cout. May only work
in the tests run directly from ./EngineTests (with or without filter)
# Creating new tests
Script next on the agenda...
# Known Problems
There are 5 (maybe 6) tests that currently fail which are the function of
broken tests, not the engine. They are on the agenda to fix (expired
keys inside imported mails, etc). You'll see something like this - please
ignore for this particular second in time:
```
170 ms: ./EngineTests SubkeyRatingEvalTest.check_subkey_rating_eval_no_es
170 ms: ./EngineTests SubkeyRatingEvalTest.check_subkey_rating_eval_revoked_sign_no_alt
253 ms: ./EngineTests SubkeyRatingEvalTest.check_subkey_rating_eval_weak_e_strong_ecc_se
1189 ms: ./EngineTests KeyResetMessageTest.check_non_reset_receive_revoked
1376 ms: ./EngineTests KeyResetMessageTest.check_reset_receive_revoked
```
The normal run of the tests in parallel eats output. Try running the individual test case as above if you need to see a test case's output.

@ -152,6 +152,12 @@ TEST_F(CheckRenewedExpiredKeyTrustStatusTest, check_renewed_expired_key_trust_st
const char* inquisitor_fpr = "8E8D2381AE066ABE1FEE509821BA977CA4728718";
pEp_identity* expired_inquisitor = new_identity("inquisitor@darthmama.org", "8E8D2381AE066ABE1FEE509821BA977CA4728718", "TOFU_inquisitor@darthmama.org", "Lady Claire Trevelyan");
PEP_comm_type key_ct;
status = get_key_rating(session, inquisitor_fpr, &key_ct);
ASSERT_EQ(status, PEP_STATUS_OK);
ASSERT_EQ(key_ct, PEP_ct_key_expired);
status = set_identity(session, expired_inquisitor);
ASSERT_EQ(status , PEP_STATUS_OK);
expired_inquisitor->comm_type = PEP_ct_OpenPGP; // confirmed

@ -0,0 +1,157 @@
#include <stdlib.h>
#include <string>
#include <cstring>
#include <iostream>
#include <fstream>
#include "pEpEngine.h"
#include "test_util.h"
#include "TestConstants.h"
#include "Engine.h"
#include "keymanagement.h"
#include <gtest/gtest.h>
namespace {
//The fixture for Engine703Test
class Engine703Test : public ::testing::Test {
public:
Engine* engine;
PEP_SESSION session;
protected:
// You can remove any or all of the following functions if its body
// is empty.
Engine703Test() {
// You can do set-up work for each test here.
test_suite_name = ::testing::UnitTest::GetInstance()->current_test_info()->GTEST_SUITE_SYM();
test_name = ::testing::UnitTest::GetInstance()->current_test_info()->name();
test_path = get_main_test_home_dir() + "/" + test_suite_name + "/" + test_name;
}
~Engine703Test() override {
// You can do clean-up work that doesn't throw exceptions here.
}
// If the constructor and destructor are not enough for setting up
// and cleaning up each test, you can define the following methods:
void SetUp() override {
// Code here will be called immediately after the constructor (right
// before each test).
// Leave this empty if there are no files to copy to the home directory path
std::vector<std::pair<std::string, std::string>> init_files = std::vector<std::pair<std::string, std::string>>();
init_files.push_back(std::pair<std::string, std::string>(std::string("test_files/2017-imported-key/keys.db"), std::string("keys.db")));
init_files.push_back(std::pair<std::string, std::string>(std::string("test_files/2017-imported-key/management.db"), std::string("management.db")));
// Get a new test Engine.
engine = new Engine(test_path);
ASSERT_NE(engine, nullptr);
// Ok, let's initialize test directories etc.
engine->prep(NULL, NULL, init_files);
// Ok, try to start this bugger.
engine->start();
ASSERT_NE(engine->session, nullptr);
session = engine->session;
// Engine is up. Keep on truckin'
}
void TearDown() override {
// Code here will be called immediately after each test (right
// before the destructor).
engine->shut_down();
delete engine;
engine = NULL;
session = NULL;
}
private:
const char* test_suite_name;
const char* test_name;
string test_path;
// Objects declared here can be used by all tests in the Engine703Test suite.
};
} // namespace
TEST_F(Engine703Test, check_engine703_expired_imported) {
// (pEp_identity) $1 = {
// address = 0x000000010160a460 "test010@exchange.peptest.ch"
// fpr = 0x000000010160a8c0 "D4B3091B5BC8BA5DF4A0BFD900187F11F2216F5F"
// user_id = 0x000000010160a760 "pEp_own_userId"
// username = 0x000000010160a8f0 "test010@exchange.peptest.ch"
// comm_type = PEP_ct_pEp
// lang = ""
// me = true
// major_ver = 0
// minor_ver = 0
// flags = 0
// }
identity_list* id_list = NULL;
PEP_STATUS status = own_identities_retrieve(session, &id_list);
ASSERT_EQ(status, PEP_STATUS_OK);
ASSERT_NE(id_list->ident, nullptr);
ASSERT_EQ(id_list->next, nullptr);
pEp_identity* me = id_list->ident;
status = myself(session, me);
ASSERT_STREQ(me->fpr, "D4B3091B5BC8BA5DF4A0BFD900187F11F2216F5F");
// char* keydata = NULL;
// status = export_key(session, me->fpr, &keydata);
//
// ofstream outfile;
// outfile.open("703_key.asc");
// outfile << keydata;
// outfile.close();
free_identity_list(id_list);
}
TEST_F(Engine703Test, check_engine703_valid_renew) {
// (pEp_identity) $1 = {
// address = 0x000000010160a460 "test010@exchange.peptest.ch"
// fpr = 0x000000010160a8c0 "D4B3091B5BC8BA5DF4A0BFD900187F11F2216F5F"
// user_id = 0x000000010160a760 "pEp_own_userId"
// username = 0x000000010160a8f0 "test010@exchange.peptest.ch"
// comm_type = PEP_ct_pEp
// lang = ""
// me = true
// major_ver = 0
// minor_ver = 0
// flags = 0
// }
identity_list* id_list = NULL;
PEP_STATUS status = own_identities_retrieve(session, &id_list);
ASSERT_EQ(status, PEP_STATUS_OK);
ASSERT_NE(id_list->ident, nullptr);
ASSERT_EQ(id_list->next, nullptr);
pEp_identity* me = id_list->ident;
status = myself(session, me);
// ASSERT_STREQ(me->fpr, "D4B3091B5BC8BA5DF4A0BFD900187F11F2216F5F");
ASSERT_STRNE(me->fpr, nullptr);
char* keydata = NULL;
size_t size = 0;
status = export_secret_key(session, me->fpr, &keydata, &size);
ofstream outfile;
outfile.open("703_key_valid.asc");
outfile << keydata;
outfile.close();
free_identity_list(id_list);
}

@ -0,0 +1,86 @@
#include <stdlib.h>
#include <string>
#include <cstring>
#include "pEpEngine.h"
#include "test_util.h"
#include "TestConstants.h"
#include "Engine.h"
#include <gtest/gtest.h>
namespace {
//The fixture for Engine715Test
class Engine715Test : public ::testing::Test {
public:
Engine* engine;
PEP_SESSION session;
protected:
// You can remove any or all of the following functions if its body
// is empty.
Engine715Test() {
// You can do set-up work for each test here.
test_suite_name = ::testing::UnitTest::GetInstance()->current_test_info()->GTEST_SUITE_SYM();
test_name = ::testing::UnitTest::GetInstance()->current_test_info()->name();
test_path = get_main_test_home_dir() + "/" + test_suite_name + "/" + test_name;
}
~Engine715Test() override {
// You can do clean-up work that doesn't throw exceptions here.
}
// If the constructor and destructor are not enough for setting up
// and cleaning up each test, you can define the following methods:
void SetUp() override {
// Code here will be called immediately after the constructor (right
// before each test).
// Leave this empty if there are no files to copy to the home directory path
std::vector<std::pair<std::string, std::string>> init_files = std::vector<std::pair<std::string, std::string>>();
// Get a new test Engine.
engine = new Engine(test_path);
ASSERT_NE(engine, nullptr);
// Ok, let's initialize test directories etc.
engine->prep(NULL, NULL, init_files);
// Ok, try to start this bugger.
engine->start();
ASSERT_NE(engine->session, nullptr);
session = engine->session;
// Engine is up. Keep on truckin'
}
void TearDown() override {
// Code here will be called immediately after each test (right
// before the destructor).
engine->shut_down();
delete engine;
engine = NULL;
session = NULL;
}
private:
const char* test_suite_name;
const char* test_name;
string test_path;
// Objects declared here can be used by all tests in the Engine715Test suite.
};
} // namespace
TEST_F(Engine715Test, check_engine_715) {
// This is just a dummy test case. The convention is check_whatever_you_are_checking
// so for multiple test cases in a suite, be more explicit ;)
string keyfile = slurp("test_keys/t001.asc");
PEP_STATUS status = import_key(session, keyfile.c_str(), keyfile.size(), NULL);
ASSERT_EQ(status, PEP_KEY_IMPORTED);
}

@ -2410,6 +2410,29 @@ TEST_F(KeyResetMessageTest, check_reset_mistrust_next_msg_have_not_mailed) {
ASSERT_EQ(rating, PEP_rating_reliable);
}
// ENGINE-716
TEST_F(KeyResetMessageTest, check_reset_all_own_keys_one_URI_partner) {
// me
pEp_identity* me = new_identity("payto://BIC/SYSTEMA", NULL, "SystemA", NULL);
PEP_STATUS status = myself(session, me);
ASSERT_EQ(status, PEP_STATUS_OK);
ASSERT_NE(me->fpr, nullptr);
char* copy_fpr = strdup(me->fpr);
// I don't think this is relevant.
pEp_identity* you = new_identity("payto://BIC/SYSTEMB", NULL, "SystemB", NULL);
ASSERT_TRUE(slurp_and_import_key(session, "test_keys/pub/SYSTEMB-0xD47A817B3_pub.asc"));
status = update_identity(session, you);
ASSERT_EQ(status, PEP_STATUS_OK);
ASSERT_NE(you->fpr, nullptr);
status = key_reset_all_own_keys(session);
ASSERT_EQ(status, PEP_STATUS_OK);
status = myself(session, me);
ASSERT_STRNE(me->fpr, copy_fpr);
}
/*
TEST_F(KeyResetMessageTest, check_reset_own_with_revocations) {
pEp_identity* id1 = new_identity("krista-not-real@darthmama.org", NULL, PEP_OWN_USERID, "Krista at Home");

@ -107,10 +107,12 @@ TEST_F(KeyeditTest, check_keyedit) {
// keyedit test code
timestamp *ts = new_timestamp(time(0));
time_t now = time(NULL);
output_stream << "Time is " << now << endl;
timestamp *ts = new_timestamp(now);
ts->tm_year += 2;
output_stream << "key shell expire on " << asctime(ts) << "\n";
output_stream << "key shall expire on " << asctime(ts) << "\n";
PEP_STATUS status2 = renew_key(session, key.c_str(), ts);
output_stream << "renew_key() exited with " << status2 << "\n";

@ -92,6 +92,9 @@ TEST_F(SubkeyRatingEvalTest, check_subkey_rating_eval_no_es) {
PEP_comm_type ct = PEP_ct_unknown;
PEP_STATUS status = get_key_rating(session, "F0D03C842C0770C2C2A9FEAF2A1ED9814929DC45", &ct);
ASSERT_EQ(status , PEP_STATUS_OK);
bool expired = false;
status = key_expired(session, "F0D03C842C0770C2C2A9FEAF2A1ED9814929DC45", time(NULL), &expired);
ASSERT_FALSE(expired);
ASSERT_EQ(ct , PEP_ct_key_b0rken);
}

@ -206,6 +206,8 @@ TEST_F(VerifyTest, check_revoked_signing_key) {
ASSERT_EQ(keylist->next, nullptr);
}
// Not REALLY sure what the difference here is btw this and the next one, but OK..
// I'm guessing the keys differ in what's expired? Neal?
TEST_F(VerifyTest, check_expired_tpk) {
slurp_and_import_key(session, "test_keys/priv/pep-test-mary-0x7F59F03CD04A226E_priv.asc");
slurp_and_import_key(session, "test_keys/pub/pep-test-mary-0x7F59F03CD04A226E_expired_pub.asc");
@ -223,11 +225,11 @@ TEST_F(VerifyTest, check_expired_tpk) {
&plaintext, &plaintext_size,
&keylist, NULL);
// It should fail.
ASSERT_EQ(status , PEP_DECRYPTED);
// It should not fail.
ASSERT_EQ(status , PEP_DECRYPTED_AND_VERIFIED);
ASSERT_NE(keylist, nullptr);
// No signer.
ASSERT_STREQ(keylist->value, "");
ASSERT_STREQ(keylist->value, "599B3D67800DB37E2DCE05C07F59F03CD04A226E");
// Recipient is mary.
ASSERT_NE(keylist->next, nullptr);
ASSERT_NE(keylist->next->value, nullptr);
@ -248,11 +250,14 @@ TEST_F(VerifyTest, check_expired_tpk) {
&keylist);
// Now it should fail.
ASSERT_EQ(status , PEP_UNENCRYPTED);
ASSERT_EQ(status , PEP_VERIFIED);
ASSERT_NE(keylist, nullptr);
// No signer.
ASSERT_STREQ(keylist->value, "");
// Signer.
ASSERT_STREQ(keylist->value, "599B3D67800DB37E2DCE05C07F59F03CD04A226E");
ASSERT_EQ(keylist->next, nullptr);
free(plaintext);
free_stringlist(keylist);
}
TEST_F(VerifyTest, check_expired_signing_key) {
@ -272,18 +277,30 @@ TEST_F(VerifyTest, check_expired_signing_key) {
&plaintext, &plaintext_size,
&keylist, NULL);
// It should fail.
ASSERT_EQ(status , PEP_DECRYPTED);
// It should not fail.
ASSERT_EQ(status , PEP_DECRYPTED_AND_VERIFIED);
ASSERT_NE(keylist, nullptr);
// No signer.
ASSERT_STREQ(keylist->value, "");
// Yes, signer.
ASSERT_STREQ(keylist->value, "599B3D67800DB37E2DCE05C07F59F03CD04A226E");
// Recipient is mary.
ASSERT_NE(keylist->next, nullptr);
ASSERT_NE(keylist->next->value, nullptr);
ASSERT_STREQ(mary_fpr, keylist->next->value);
// Content is returned.
ASSERT_STREQ(plaintext, "tu was!\n");
// Let's try again though, this time doing the whole thing, because we should get
// an unreliable rating back.
free(plaintext);
plaintext = NULL;
free_stringlist(keylist);
keylist = NULL;
PEP_decrypt_flags_t flags = 0;
PEP_rating rating;
char* mod_src = NULL;
MIME_decrypt_message(session, ciphertext.c_str(), ciphertext.size(),
&plaintext, &keylist, &rating, &flags, &mod_src);
ASSERT_EQ(rating, PEP_rating_unreliable);
string text = slurp("test_files/pep-test-mary-signed.txt");
string sig = slurp("test_files/pep-test-mary-signed.txt.sig");
@ -296,11 +313,14 @@ TEST_F(VerifyTest, check_expired_signing_key) {
sig.c_str(), sig.size(),
&keylist);
// Now it should fail.
ASSERT_EQ(status , PEP_UNENCRYPTED);
// Shouldn't fail
ASSERT_EQ(status , PEP_VERIFIED);
ASSERT_NE(keylist, nullptr);
// No signer.
ASSERT_STREQ(keylist->value, "");
// Signer exists.
ASSERT_STREQ(keylist->value, "599B3D67800DB37E2DCE05C07F59F03CD04A226E");
ASSERT_EQ(keylist->next, nullptr);
free(plaintext);
free_stringlist(keylist);
}
#endif

@ -0,0 +1,30 @@
13:08:31.532 | ThisAddIn_Startup: Disable GPGOL
13:08:32.111 | ThisAddIn_Startup: Set UI language
13:08:32.111 | ThisAddIn_Startup: en language detected.
13:08:32.111 | ThisAddIn_Startup: Connect Events
13:08:32.111 | ThisAddIn_Startup: Loading settings
13:08:32.126 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:08:32.126 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:08:32.126 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:08:32.126 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:08:32.126 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:08:32.126 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.
13:08:32.157 | ThisAddIn_Startup: Register callbacks
13:08:32.173 | ThisAddIn_Startup: Setting cipher suite pEpCipherSuiteDefault
13:08:32.173 | ThisAddIn_Startup: Register myself
13:08:32.189 | ThisAddIn_Startup: Sync settings
13:08:33.876 | ThisAddIn_Startup: Get Outlook options and set pEp required values.
13:08:33.876 | ThisAddIn_Startup: Connect Watched objects
13:08:33.939 | ThisAddIn_Startup: Connect Application Events.
13:08:33.939 | ThisAddIn_Startup: Initializing inbox cleaner.
13:08:33.954 | ThisAddIn_Startup: Main program started.
13:09:31.876 |E| OpenDialogAndImportKeys: Error occured. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at pEp.UI.FormControlOptions.State.OpenDialogAndImportKeys()
13:10:24.563 |E| OpenDialogAndImportKeys: Error occured. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at pEp.UI.FormControlOptions.State.OpenDialogAndImportKeys()
13:10:38.519 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:10:38.519 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:10:38.519 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:10:38.519 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:10:38.519 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:10:38.519 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.

@ -0,0 +1,31 @@
13:02:28.595 | ThisAddIn_Startup: Disable GPGOL
13:02:30.227 | ThisAddIn_Startup: Set UI language
13:02:30.229 | ThisAddIn_Startup: en language detected.
13:02:30.230 | ThisAddIn_Startup: Connect Events
13:02:30.230 | ThisAddIn_Startup: Loading settings
13:02:30.262 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:02:30.262 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:02:30.262 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:02:30.263 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:02:30.264 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:02:30.265 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.
13:02:30.328 |E| AccountExtensions.IsLocalDomain: Error determining if local domain, returning default. System.Net.Sockets.SocketException (0x80004005): A non-recoverable error occurred during a database lookup
at System.Net.Dns.GetAddrInfo(String name)
at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
at pEp.AccountExtensions.GetIsInLocalDomain(Account account)
13:02:31.316 | ThisAddIn_Startup: Register callbacks
13:02:31.322 | ThisAddIn_Startup: Setting cipher suite pEpCipherSuiteDefault
13:02:31.323 | ThisAddIn_Startup: Register myself
13:02:31.327 | ThisAddIn_Startup: Sync settings
13:02:32.556 | ThisAddIn_Startup: Get Outlook options and set pEp required values.
13:02:32.560 | ThisAddIn_Startup: Connect Watched objects
13:02:32.625 | ThisAddIn_Startup: Connect Application Events.
13:02:32.626 | ThisAddIn_Startup: Initializing inbox cleaner.
13:02:32.630 | ThisAddIn_Startup: Main program started.
13:05:12.501 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:05:12.501 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:05:12.501 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:05:12.501 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:05:12.501 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:05:12.501 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.

@ -0,0 +1,32 @@
13:11:13.583 | ThisAddIn_Startup: Disable GPGOL
13:11:13.848 | ThisAddIn_Startup: Set UI language
13:11:13.848 | ThisAddIn_Startup: en language detected.
13:11:13.848 | ThisAddIn_Startup: Connect Events
13:11:13.848 | ThisAddIn_Startup: Loading settings
13:11:13.864 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:11:13.864 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:11:13.864 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:11:13.864 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:11:13.864 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:11:13.864 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.
13:11:13.880 | ThisAddIn_Startup: Register callbacks
13:11:13.880 | ThisAddIn_Startup: Setting cipher suite pEpCipherSuiteDefault
13:11:13.880 | ThisAddIn_Startup: Register myself
13:11:13.895 | ThisAddIn_Startup: Sync settings
13:11:15.864 | ThisAddIn_Startup: Get Outlook options and set pEp required values.
13:11:15.864 | ThisAddIn_Startup: Connect Watched objects
13:11:15.926 | ThisAddIn_Startup: Connect Application Events.
13:11:15.942 | ThisAddIn_Startup: Initializing inbox cleaner.
13:11:15.942 | ThisAddIn_Startup: Main program started.
13:11:42.257 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:11:42.257 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:11:42.257 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:11:42.257 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:11:42.257 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:11:42.257 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.
13:11:45.694 |W| GetRegistryBoolean: No value retrieved for IsCrashReportVisible. Returning default value True.
13:11:45.694 |W| GetRegistryBoolean: No value retrieved for IsDeveloperModeEnabled. Returning default value False.
13:11:45.694 |W| GetRegistryBoolean: No value retrieved for IsDisableProtectionForContactsEnabled. Returning default value False.
13:11:45.694 |W| GetRegistryBoolean: No value retrieved for IsGrouped. Returning default value False.
13:11:45.694 |W| GetRegistryBoolean: No value retrieved for IsSensitiveDataLoggingEnabled. Returning default value False.
13:11:45.694 |W| GetRegistryBoolean: No value retrieved for IsUXImprovementEnabled. Returning default value True.

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

@ -0,0 +1,31 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBF5xGNABCACsyQrsxfLL9/5b4Gm8A1jqkRh80j8keizf2iOJ4rp4SWEE6o62
bR69OS/UM7NN5tTaYBYACXWd2lr8Gi+IypkWe9xyfrq26nJVtLRj6hV3+IIrpzg9
G7o1nKGAv4qMqWDhrFNM0veiHf680rWSkk/8HkWQMZHXxPQCgMt4sSRbvkepgn4C
6rn7YkC5yyvlcfn252AEkGwa+5q+incXkAoxx8viph6sInr1w8cCR3iBS3+2/zXy
tQ+q4IhFHYAesu4IxA+/XN+nyKIrWAQnFZEygq4/icgPsjc6rSJXlaefLYgEHG3k
qjqdwxjvzew9B+VzpUyEwZ8aMy0W6/6IyCsTABEBAAG0KXBheXRvOi8vQklDL1NZ
U1RFTUIgPHBheXRvOi8vQklDL1NZU1RFTUI+iQFUBBMBCAA+FiEE5TF1CQ0sUg31
HkxzJYrMTUeoF7MFAl5xGNACGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgEC
F4AACgkQJYrMTUeoF7OKbwf/QDmLHPbo6xHE7rPythCPZBVToSJlEhcotJu1p9yM
sqn52LR47X8K+eaJ8M0LTOTXhu+jV0q9YOP0rUOJfuBU81DmWe2/cnsoAdP8jgCc
8bO4S4MXZOe7//FY6uEpfhqfPtSsiIsCPWjqmSAGFmBSxUHP0MiJob6giV6o6DS1
aynOtq/3xOT6hDW4+PBfqT/i4W5OZEjX/v6DaaMefTIjxP2ZHe+4qlG6daUlIP0w
LGKIu7/XcMBPwLLKnzgK4j48klu68zhSJTKlDWI183uIvVxsfWnG4nnbCJX9PnUa
fqW+OdB04rdVsqKFb5X/pZmmEDfQKE5AchQawv7woiycULkBDQRecRjQAQgA+Uvr
x+X1SzH8iTKsaDq68tucEhEq+TPIGsKUtIUI9tzIlPNsLS8Wrr9yVO1lq45rdvGb
Et0/trjxWfGPQPCGupI8Stl6c6I6lHjnNtsDB/MULFJz6IBdYT7WGz8+iGAVx0KI
HAdRfOK+iGFSn4oSnBlbk1zo7mX5Eu7gIwyVgM0e3X9LxsVKYvvQZZkwUY46mxJ1
IEHNBIzaEh8ds+gpWWLUmJHPdB/cFbNh/fcM5xhamBdvcVa9t3UsVpjQNzSkY+TR
fQnT8DshKJZ7+O3iUfZkqOFAUBFvJFXDjanBbrYePGwH6NrDXTn/WfzAmvf6NhuH
e1mnaIpVkjJH8V9QJwARAQABiQE8BBgBCAAmFiEE5TF1CQ0sUg31HkxzJYrMTUeo
F7MFAl5xGNACGwwFCQPCZwAACgkQJYrMTUeoF7NsHAf/fQkzW40U8J7gOy9yX6As
1KjsrydcNaJN8y5IOa0216vQLJZEHbb1a/8YW77CeBpL2sPu/LCiwl8Mks/iMAA+
U2ehXiKbDlAVQZQpDqbgNurQDyUPMRReXopj9IaccYlZ+QrV5WE278wf9y6D5p9X
HDDgD884Sd9bC2n3YvjOcUJovXS8lp9jo3ENGY/28N7oqcX5C2HHRZB1oswWUr3v
ih+IiIe8J9Q1pim1Qki6Iye6Lj9AyOzVO2nEvcWys0GO8vtUpl5pyy+fWoegycAW
DKKdn1VY8oAyOmhxiZWXGaFFDgx36jamSj+XhPfQU/xwTndcXMjEGThinX8IbKh1
VA==
=rqmY
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,103 @@
************************************************************************
* WARNING: This file is a backup of your secret key. Please keep it in *
* a safe place. *
************************************************************************
The key backed up in this file is:
pub rsa2048 2020-03-13 [SC] [expires: 2021-03-12]
3C44 7695 DB7A 64B9 E6B0 8E9D 2023 49D2 B40D C002
uid [ultimate] test001@exchange.peptest.ch <test001@exchange.peptest.ch>
sub rsa2048 2020-03-13 [E]
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBF5rpQsBCAChMqMKj4rHsSvLrk+g5CdW2qQYPQO0Spl+8J3hCyqsPbv2sufK
okiWMbbz0prCHn/QWJbxVixuNqLt/JdBI8sg1n/bUNg0bvtwrcgKFfMiK+ka1iYi
rCHZY6gxGVfpL+aohcOjo0Qm9lLSwLXioYhgRW5BwHVZO7jX7T18VySFOhlBxBVX
WEe7fH5v/28Zd3VVSJc0Q02Rsj6rgM2GOROInYEf0tz0z+KUs0g+ol3iBV4yG8tt
v4f209M8Jx0aVOXSalH7a2baqPk1ly3ziFayQjsn5wBmMe6GEUzjkMA9LvXryoMC
aCzgwA4CqE9Egh6t5r/DYdga28feUTNLbVxJABEBAAG0OXRlc3QwMDFAZXhjaGFu
Z2UucGVwdGVzdC5jaCA8dGVzdDAwMUBleGNoYW5nZS5wZXB0ZXN0LmNoPokBVAQT
AQgAPgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBDxEdpXbemS55rCOnSAj
SdK0DcACBQJea6WJBQkB36SlAAoJECAjSdK0DcACDnQH/2RUf95/hIi9M2gxW37+
LdQIWJgVlFqBwmsFoQwO0mvLJK7qFaTHTsxou1j9o6gI3dMsWqa3/s3oOzDm6qoO
jVgi45xEF8plusASIgvC81DnwnZ3AzWaeWH0+oVSabu2ONMRHik2j6vwKycJ8s+e
FvIJvIIZW6twiocub4PYOZnfD5jaGQNu34z21OyGuxOQlGYcMilCBZfzhTLO6TIM
wI+FrVI4o4BQ9H8jw1wqwNLBu+gQckm9Hinhx7NvfNrdsyfRSacYa7WtFOZ8DGa6
LKK7BCYISIlmj4oPetUpbHvdi1bR3h+e6WpC7OBouiDOVn47GOMRO872kxTdKel5
aq65AQ0EXmulCwEIAMASp6fOUXUia+UXIlvPFIyE6VQNqGPrVzGLnF2KepjFVynx
G4zGPZvTsGEGkvFIhJUD/vGH+5oO2DVoRMEnbocRyV2QKUAKrhU/qkYfRjq+HiEb
23sGkPq7tdwyAuzqrTSFi5TU9uuk+gl/4MocOoPcEmLzupPez2THZjUVQnVEeLsk
rDcTUMXuRyP919lvr/6SjlZKS+2PAN4BTxlw3TeXivX33kREScQLZqxAXlSCbCum
UVasbZHYXmIrnq7xilOeKP6vC/eAlmzx1QVuoqP/CezShpmWzgZOrqQKcwF3ODi8
1g/e70xGznZmxVTRiDKYE7Ro9ltsY3qLovYrru8AEQEAAYkBNgQYAQgAIBYhBDxE
dpXbemS55rCOnSAjSdK0DcACBQJea6ULAhsMAAoJECAjSdK0DcACQokH/2MFEx5r
1upQ/8LtjBmsA7DgU/5iMuFnrC1BKK9CrOtNZD2IjY6iDdzCocREeTWNBhfILXM5
S+G19qGgYAK80DU7ZsUiRoR5buvlbfFDDat8Nx0pU+o/srDn04K5Wys9Hby5DTdc
O7ye73uEXXgJIhNZknX9PSbA76EEuCBJtFUVPsvcMyO4/ZuLWcPzCL2bBa+RUUBw
aOEvYu7jOskIC8IGooCZYHFyY9NdP8FplIZEZVFJ8zlySiiIZQB9UYWgAInxQoZu
O4ap6OdgYDHnaSeG71beSucKyBgiQnbNCOIVoHt2QoMSfw0vfK2OOnSd8seYei6I
RQyt6Sde721aYK0=
=7LoU
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
8seYei6IRQyt6Sde721aYK0=
=tiMO
-----END PGP PRIVATE KEY BLOCK-----
Loading…
Cancel
Save