forked from pEp.foundation/pEpEngine
commit
b5f1563266
@ -0,0 +1,32 @@
|
||||
import argparse
|
||||
import gnupg
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("pattern")
|
||||
parser.add_argument("--priv", "-p", help="also delete associated private keys", action='store_true')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
homedir = os.path.join(os.path.expanduser('~'),".gnupg")
|
||||
print("GNUPGHOME=" + homedir + "\n")
|
||||
|
||||
try:
|
||||
gpg = gnupg.GPG(gnupghome=homedir)
|
||||
except TypeError:
|
||||
gpg = gnupg.GPG(homedir=homedir)
|
||||
|
||||
if not args.pattern:
|
||||
raise Exception("No pattern? How'd you do that?")
|
||||
|
||||
public_keys = gpg.list_keys(keys=args.pattern) # same as gpg.list_keys(False)
|
||||
|
||||
for key in public_keys:
|
||||
print("Deleting keys...\n")
|
||||
for uid in key['uids']:
|
||||
print(uid + " ")
|
||||
print(key['fingerprint'] + "\n")
|
||||
if args.priv:
|
||||
gpg.delete_keys(key['fingerprint'], True)
|
||||
gpg.delete_keys(key['fingerprint'])
|
@ -0,0 +1,101 @@
|
||||
import argparse
|
||||
import gnupg
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("num_keys", type=int)
|
||||
parser.add_argument("real_name_prefix")
|
||||
parser.add_argument("email_address_prefix")
|
||||
parser.add_argument("output_root", help="root of where to stick the keys (keys go into pub/ and priv/ accordingly)")
|
||||
parser.add_argument("--no_suffix", "-x", help="Use name and email address as is - do not create incremental ones based on the input", action='store_true')
|
||||
parser.add_argument("--hgadd", "-a", help="hg add the created keyfiles", action='store_true')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
pub_path = os.path.join(args.output_root, "pub")
|
||||
priv_path = os.path.join(args.output_root, "priv")
|
||||
|
||||
homedir = os.path.join(os.path.expanduser('~'),".gnupg")
|
||||
print("GNUPGHOME=" + homedir + "\n")
|
||||
|
||||
try:
|
||||
gpg = gnupg.GPG(gnupghome=homedir)
|
||||
except TypeError:
|
||||
gpg = gnupg.GPG(homedir=homedir)
|
||||
|
||||
name = args.real_name_prefix
|
||||
email = args.email_address_prefix
|
||||
|
||||
suffix = not args.no_suffix
|
||||
|
||||
name_prefix = args.real_name_prefix + " "
|
||||
e_split = args.email_address_prefix.split('@')
|
||||
e_split_len = len(e_split)
|
||||
|
||||
if (e_split_len > 2):
|
||||
for j in range(e_split_len - 1):
|
||||
email_0 = email_0 + e_split[j] + "@"
|
||||
email_0 = email_0 + _ + i_str + e_split[e_split_len - 1]
|
||||
email_1 = e_split_len[e_split_len - 1]
|
||||
e_split = [email_0, email_1]
|
||||
e_split_len = 2
|
||||
elif (e_split_len == 0):
|
||||
email_0 = "doge"
|
||||
email_1 = "dogepile.me"
|
||||
e_split = [email_0, email_1]
|
||||
e_split_len = 2
|
||||
|
||||
num_keys = args.num_keys
|
||||
|
||||
for i in range(num_keys):
|
||||
i_str = str(i)
|
||||
|
||||
if suffix:
|
||||
|
||||
name = name_prefix + i_str
|
||||
|
||||
if e_split_len == 1:
|
||||
email = e_split[0] + "_" + i_str
|
||||
elif e_split_len == 2:
|
||||
email = e_split[0] + "_" + i_str + "@" + e_split[1]
|
||||
|
||||
print("Generating key data for " + name + " " + email + "\n")
|
||||
input_data = gpg.gen_key_input(key_type="RSA", key_length=2048, subkey_type="RSA", subkey_length=2048, expire_date=0, name_real=name, name_email=email, password="")
|
||||
if not input_data:
|
||||
raise Exception('Input data not created in iteration ' + str(i))
|
||||
|
||||
print(input_data)
|
||||
key = None
|
||||
key = gpg.gen_key(input_data)
|
||||
if not key:
|
||||
raise Exception('Key not created in iteration ' + str(i))
|
||||
pubkey = None
|
||||
privkey = None
|
||||
|
||||
fpr = key.fingerprint
|
||||
print("Generated " + fpr)
|
||||
key_filename_prefix = e_split[0] + "_" + i_str + "-0x" + fpr[-8:] + "_"
|
||||
|
||||
|
||||
pubkey = gpg.export_keys(fpr)
|
||||
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")
|
||||
|
||||
# Write to file
|
||||
pubkey_file = open(pubkey_filename,'w')
|
||||
pubkey_file.write(pubkey)
|
||||
pubkey_file.close()
|
||||
privkey_file = open(privkey_filename,'w')
|
||||
privkey_file.write(privkey)
|
||||
privkey_file.close()
|
||||
|
||||
# Delete keys from keyring
|
||||
gpg.delete_keys(fpr, True) # True => private keys
|
||||
gpg.delete_keys(fpr)
|
||||
|
||||
if (args.hgadd):
|
||||
subprocess.run(["hg", "add", pubkey_filename])
|
||||
subprocess.run(["hg", "add", privkey_filename])
|
@ -0,0 +1,146 @@
|
||||
// This file is under GNU General Public License 3.0
|
||||
// see LICENSE.txt
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "platform.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <assert.h>
|
||||
#include "mime.h"
|
||||
#include "message_api.h"
|
||||
#include "keymanagement.h"
|
||||
#include "test_util.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
cout << "\n*** decrypt_attach_private_key_trusted_test ***\n\n";
|
||||
|
||||
PEP_SESSION session;
|
||||
|
||||
cout << "calling init()\n";
|
||||
PEP_STATUS status1 = init(&session);
|
||||
assert(status1 == PEP_STATUS_OK);
|
||||
assert(session);
|
||||
cout << "init() completed.\n";
|
||||
|
||||
const char* own_uid = PEP_OWN_USERID;
|
||||
|
||||
cout << "Importing keys..." << endl;
|
||||
|
||||
string input_key;
|
||||
const char* main_addr = "priv-key-import-test-main@darthmama.cool";
|
||||
pEp_identity* main_me = NULL;
|
||||
const char* fpr_main_me = "13A9F97964A2B52520CAA40E51BCA783C065A213";
|
||||
pEp_identity* same_addr_same_uid = NULL;
|
||||
const char* fpr_same_addr_same_uid = "8AB616A3BD51DEF714B5E688EFFB540C3276D2E5";
|
||||
|
||||
PEP_STATUS status = PEP_STATUS_OK;
|
||||
|
||||
// key for main own user
|
||||
//
|
||||
// 13A9F97964A2B52520CAA40E51BCA783C065A213
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_0-0xC065A213_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
input_key = slurp("test_keys/priv/priv-key-import-test-main_0-0xC065A213_priv.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
// ensure there's no private key - doesn't work in automated tests, sadly. Uncommon when running script manually.
|
||||
bool has_priv = false;
|
||||
// status = contains_priv_key(session, fpr_same_addr_same_uid, &has_priv);
|
||||
// if (status == PEP_STATUS_OK && has_priv) {
|
||||
// cout << "SORRY, have to delete keys here to run test correctly..." << endl;
|
||||
// status = delete_keypair(session, fpr_same_addr_same_uid);
|
||||
// if (status == PEP_STATUS_OK) {
|
||||
// has_priv = false;
|
||||
// status = contains_priv_key(session, fpr_same_addr_same_uid, &has_priv);
|
||||
// assert(has_priv == false);
|
||||
// cout << "Successfully deleted keypair for " << fpr_same_addr_same_uid << " - will now import the public key only" << endl;
|
||||
// }
|
||||
// else
|
||||
// cout << "Warning - delete keypair returned status " << tl_status_string(status) << ". This may or may not be an error, depending on what you expect." << endl;
|
||||
// }
|
||||
|
||||
// key with same address and user_id
|
||||
// 8AB616A3BD51DEF714B5E688EFFB540C3276D2E5
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_0-0x3276D2E5_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
|
||||
cout << "Setting up own identity with default key " << fpr_main_me << endl;
|
||||
// Own identity with default key etc
|
||||
main_me = new_identity(main_addr, fpr_main_me, own_uid, "PrivateKey Import Test");
|
||||
status = set_own_key(session, main_me, fpr_main_me);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
assert(strcmp(main_me->fpr, fpr_main_me) == 0);
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
cout << "Setting up sender identities and resetting key trust." << endl;
|
||||
cout << "Same address, same user_id - address: " << main_addr << ", user_id: " << own_uid << ", fpr: " << fpr_same_addr_same_uid << endl;
|
||||
same_addr_same_uid = new_identity(main_addr, fpr_same_addr_same_uid, own_uid, "PrivateKey Import Test");
|
||||
assert(status == PEP_STATUS_OK || status == PEP_CANNOT_FIND_IDENTITY);
|
||||
assert((same_addr_same_uid->comm_type & PEP_ct_confirmed) != PEP_ct_confirmed);
|
||||
|
||||
status = key_reset_trust(session, same_addr_same_uid);
|
||||
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
cout << "Reading in message..." << endl;
|
||||
|
||||
string encoded_text = slurp("test_mails/priv_key_attach.eml");
|
||||
|
||||
cout << "Starting test..." << endl;
|
||||
// Case 1:
|
||||
// Same address, same user_id, untrusted
|
||||
cout << "decrypt with attached private key: Same address, same user_id, trusted" << endl;
|
||||
char* decrypted_text = NULL;
|
||||
stringlist_t* keylist_used = NULL;
|
||||
PEP_rating rating;
|
||||
PEP_decrypt_flags_t flags;
|
||||
|
||||
cout << "Trusting personal key for " << same_addr_same_uid->user_id << " and " << same_addr_same_uid->fpr << endl;
|
||||
status = trust_personal_key(session, same_addr_same_uid);
|
||||
cout << "Status is " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_STATUS_OK);
|
||||
free(decrypted_text);
|
||||
decrypted_text = NULL;
|
||||
|
||||
status = get_trust(session, same_addr_same_uid);
|
||||
cout << tl_ct_string(same_addr_same_uid->comm_type) << endl;
|
||||
|
||||
assert(same_addr_same_uid->comm_type == PEP_ct_pEp);
|
||||
|
||||
status = MIME_decrypt_message(session, encoded_text.c_str(),
|
||||
encoded_text.size(), &decrypted_text,
|
||||
&keylist_used, &rating, &flags);
|
||||
|
||||
status = get_trust(session, same_addr_same_uid);
|
||||
assert(same_addr_same_uid->comm_type == PEP_ct_pEp);
|
||||
|
||||
status = MIME_decrypt_message(session, encoded_text.c_str(),
|
||||
encoded_text.size(), &decrypted_text,
|
||||
&keylist_used, &rating, &flags);
|
||||
|
||||
cout << "Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
cout << decrypted_text << endl;
|
||||
|
||||
has_priv = false;
|
||||
status = contains_priv_key(session, fpr_same_addr_same_uid, &has_priv);
|
||||
assert(has_priv == true);
|
||||
cout << "Private key was also imported." << endl;
|
||||
|
||||
cout << "PASS!" << endl;
|
||||
status = key_reset_trust(session, main_me);
|
||||
status = key_reset_trust(session, same_addr_same_uid);
|
||||
release(session);
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
// This file is under GNU General Public License 3.0
|
||||
// see LICENSE.txt
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "platform.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <assert.h>
|
||||
#include "mime.h"
|
||||
#include "message_api.h"
|
||||
#include "keymanagement.h"
|
||||
#include "test_util.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
cout << "\n*** decrypt_attach_private_key_untrusted_test ***\n\n";
|
||||
|
||||
PEP_SESSION session;
|
||||
|
||||
cout << "calling init()\n";
|
||||
PEP_STATUS status1 = init(&session);
|
||||
assert(status1 == PEP_STATUS_OK);
|
||||
assert(session);
|
||||
cout << "init() completed.\n";
|
||||
|
||||
const char* own_uid = PEP_OWN_USERID;
|
||||
|
||||
cout << "Importing keys..." << endl;
|
||||
|
||||
string input_key;
|
||||
const char* main_addr = "priv-key-import-test-main@darthmama.cool";
|
||||
pEp_identity* main_me = NULL;
|
||||
const char* fpr_main_me = "13A9F97964A2B52520CAA40E51BCA783C065A213";
|
||||
pEp_identity* same_addr_same_uid = NULL;
|
||||
const char* fpr_same_addr_same_uid = "8AB616A3BD51DEF714B5E688EFFB540C3276D2E5";
|
||||
|
||||
PEP_STATUS status = PEP_STATUS_OK;
|
||||
|
||||
// key for main own user
|
||||
//
|
||||
// 13A9F97964A2B52520CAA40E51BCA783C065A213
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_0-0xC065A213_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
input_key = slurp("test_keys/priv/priv-key-import-test-main_0-0xC065A213_priv.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
// ensure there's no private key - doesn't work in automated tests, sadly. Uncommon when running script manually.
|
||||
bool has_priv = false;
|
||||
// status = contains_priv_key(session, fpr_same_addr_same_uid, &has_priv);
|
||||
// if (status == PEP_STATUS_OK && has_priv) {
|
||||
// cout << "SORRY, have to delete keys here to run test correctly..." << endl;
|
||||
// status = delete_keypair(session, fpr_same_addr_same_uid);
|
||||
// if (status == PEP_STATUS_OK)
|
||||
// cout << "Successfully deleted keypair for " << fpr_same_addr_same_uid << " - will now import the public key only" << endl;
|
||||
// }
|
||||
|
||||
// key with same address and user_id
|
||||
// 8AB616A3BD51DEF714B5E688EFFB540C3276D2E5
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_0-0x3276D2E5_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
|
||||
cout << "Setting up own identity with default key " << fpr_main_me << endl;
|
||||
// Own identity with default key etc
|
||||
main_me = new_identity(main_addr, fpr_main_me, own_uid, "PrivateKey Import Test");
|
||||
status = set_own_key(session, main_me, fpr_main_me);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
assert(strcmp(main_me->fpr, fpr_main_me) == 0);
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
cout << "Setting up sender identities and resetting key trust." << endl;
|
||||
cout << "Same address, same user_id - address: " << main_addr << ", user_id: " << own_uid << ", fpr: " << fpr_same_addr_same_uid << endl;
|
||||
same_addr_same_uid = new_identity(main_addr, fpr_same_addr_same_uid, own_uid, "PrivateKey Import Test");
|
||||
assert(status == PEP_STATUS_OK || status == PEP_CANNOT_FIND_IDENTITY);
|
||||
assert((same_addr_same_uid->comm_type & PEP_ct_confirmed) != PEP_ct_confirmed);
|
||||
|
||||
status = key_reset_trust(session, same_addr_same_uid);
|
||||
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
cout << "Reading in message..." << endl;
|
||||
|
||||
string encoded_text = slurp("test_mails/priv_key_attach.eml");
|
||||
|
||||
cout << "Starting tests..." << endl;
|
||||
// Case 1:
|
||||
// Same address, same user_id, untrusted
|
||||
cout << "Same address, same user_id, untrusted" << endl;
|
||||
char* decrypted_text = NULL;
|
||||
stringlist_t* keylist_used = NULL;
|
||||
PEP_rating rating;
|
||||
PEP_decrypt_flags_t flags;
|
||||
|
||||
status = get_trust(session, same_addr_same_uid);
|
||||
cout << tl_ct_string(same_addr_same_uid->comm_type) << endl;
|
||||
|
||||
assert((same_addr_same_uid->comm_type & PEP_ct_confirmed) != PEP_ct_confirmed);
|
||||
|
||||
status = MIME_decrypt_message(session, encoded_text.c_str(),
|
||||
encoded_text.size(), &decrypted_text,
|
||||
&keylist_used, &rating, &flags);
|
||||
|
||||
status = get_trust(session, same_addr_same_uid);
|
||||
assert(same_addr_same_uid->comm_type == PEP_ct_pEp_unconfirmed);
|
||||
|
||||
cout << "Case 1 Status: " << tl_status_string(status) << endl;
|
||||
cout << "Private key is not trusted for " << same_addr_same_uid->fpr << ", as desired, as the public key was not trusted." << endl;
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 2:
|
||||
cout << decrypted_text << endl;
|
||||
|
||||
status = key_reset_trust(session, main_me);
|
||||
status = key_reset_trust(session, same_addr_same_uid);
|
||||
release(session);
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,292 @@
|
||||
// This file is under GNU General Public License 3.0
|
||||
// see LICENSE.txt
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "platform.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <assert.h>
|
||||
#include "mime.h"
|
||||
#include "message_api.h"
|
||||
#include "keymanagement.h"
|
||||
#include "test_util.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
cout << "\n*** encrypt_attach_private_key_test ***\n\n";
|
||||
|
||||
PEP_SESSION session;
|
||||
|
||||
cout << "calling init()\n";
|
||||
PEP_STATUS status1 = init(&session);
|
||||
assert(status1 == PEP_STATUS_OK);
|
||||
assert(session);
|
||||
cout << "init() completed.\n";
|
||||
|
||||
const char* own_uid = PEP_OWN_USERID;
|
||||
const char* diff_uid_0 = "TASTY_TEST_UID_0";
|
||||
const char* diff_uid_1 = "TASTY_TEST_UID_1";
|
||||
|
||||
cout << "Importing keys..." << endl;
|
||||
|
||||
string input_key;
|
||||
const char* main_addr = "priv-key-import-test-main@darthmama.cool";
|
||||
pEp_identity* main_me = NULL;
|
||||
const char* fpr_main_me = "8AB616A3BD51DEF714B5E688EFFB540C3276D2E5";
|
||||
pEp_identity* same_addr_same_uid = NULL;
|
||||
const char* fpr_same_addr_same_uid = "359DD8AC87D1F5E4304D08338D7185F180C8CD87";
|
||||
|
||||
pEp_identity* same_addr_diff_uid = NULL;
|
||||
const char* fpr_same_addr_diff_uid = "B044B83639E292283A3F6E14C2E64B520B74809C";
|
||||
|
||||
const char* diff_addr_0 = "priv-key-import-test-other_0@darthmama.cool";
|
||||
pEp_identity* diff_addr_same_uid = NULL;
|
||||
const char* fpr_diff_addr_same_uid = "C52911EBA0D34B0F549594A15A7A363BD11252C9";
|
||||
|
||||
const char* diff_addr_1 = "priv-key-import-test-other_1@darthmama.cool";
|
||||
pEp_identity* diff_addr_diff_uid = NULL;
|
||||
const char* fpr_diff_addr_diff_uid = "567212EFB8A3A76B1D32B9565F45BEA9C785F20A";
|
||||
|
||||
PEP_STATUS status = PEP_STATUS_OK;
|
||||
|
||||
// key for main own user
|
||||
// 8AB616A3BD51DEF714B5E688EFFB540C3276D2E5
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_0-0x3276D2E5_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
input_key = slurp("test_keys/priv/priv-key-import-test-main_0-0x3276D2E5_priv.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
// key with same address and user_id (initially untrusted, then trusted)
|
||||
// 359DD8AC87D1F5E4304D08338D7185F180C8CD87
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_1-0x80C8CD87_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
// key with same address and to have different (non-aliased) user_id (initially untrusted, then trusted)
|
||||
// B044B83639E292283A3F6E14C2E64B520B74809C
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-main_2-0x0B74809C_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
// key with different address to have same user_id (initially untrusted, then trusted)
|
||||
// C52911EBA0D34B0F549594A15A7A363BD11252C9
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-other_0-0xD11252C9_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
// key with different address to have different user_id (initially untrusted, then trusted)
|
||||
// 567212EFB8A3A76B1D32B9565F45BEA9C785F20A
|
||||
input_key = slurp("test_keys/pub/priv-key-import-test-other_1-0xC785F20A_pub.asc");
|
||||
status = import_key(session, input_key.c_str(), input_key.length(), NULL);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
cout << "Setting up own identity with default key " << fpr_main_me << endl;
|
||||
// Own identity with default key etc
|
||||
main_me = new_identity(main_addr, fpr_main_me, own_uid, "PrivateKey Import Test");
|
||||
status = set_own_key(session, main_me, fpr_main_me);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
|
||||
assert(strcmp(main_me->fpr, fpr_main_me) == 0);
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
cout << "Setting up recipient identities and resetting key trust." << endl;
|
||||
cout << "#1: same address, same user_id - address: " << main_addr << ", user_id: " << own_uid << ", fpr: " << fpr_same_addr_same_uid << endl;
|
||||
// Identity with same address and user_id - the fpr here will be ignored in update_identity and friends.
|
||||
same_addr_same_uid = new_identity(main_addr, fpr_same_addr_same_uid, own_uid, "PrivateKey Import Test");
|
||||
status = key_reset_trust(session, same_addr_same_uid);
|
||||
assert(status == PEP_STATUS_OK || status == PEP_CANNOT_FIND_IDENTITY);
|
||||
assert(strcmp(same_addr_same_uid->fpr, fpr_same_addr_same_uid) == 0);
|
||||
|
||||
// Identity with same address and different user_id
|
||||
cout << "#2: same address, different user_id - address: " << main_addr << ", user_id: " << diff_uid_0 << ", fpr: " << fpr_same_addr_diff_uid << endl;
|
||||
same_addr_diff_uid = new_identity(main_addr, fpr_same_addr_diff_uid, diff_uid_0, "PrivateKey Import Test");
|
||||
assert(same_addr_diff_uid);
|
||||
status = key_reset_trust(session, same_addr_diff_uid);
|
||||
assert(status == PEP_STATUS_OK || status == PEP_CANNOT_FIND_IDENTITY);
|
||||
assert(strcmp(same_addr_diff_uid->fpr, fpr_same_addr_diff_uid) == 0);
|
||||
|
||||
// Identity with diff address and same user_id
|
||||
cout << "#3: different address, same user_id - address: " << diff_addr_0 << ", user_id: " << own_uid << ", fpr: " << fpr_diff_addr_same_uid << endl;
|
||||
diff_addr_same_uid = new_identity(diff_addr_0, fpr_diff_addr_same_uid, own_uid, "PrivateKey Import Test");
|
||||
assert(diff_addr_same_uid);
|
||||
status = key_reset_trust(session, diff_addr_same_uid);
|
||||
assert(status == PEP_STATUS_OK || status == PEP_CANNOT_FIND_IDENTITY);
|
||||
assert(strcmp(diff_addr_same_uid->fpr, fpr_diff_addr_same_uid) == 0);
|
||||
|
||||
// Identity with different address and different user_id
|
||||
cout << "#4: different address, different user_id - address: " << diff_addr_1 << ", user_id: " << diff_uid_1 << ", fpr: " << fpr_diff_addr_diff_uid << endl;
|
||||
diff_addr_diff_uid = new_identity(diff_addr_1, fpr_diff_addr_diff_uid, diff_uid_1, "PrivateKey Import Test");
|
||||
assert(diff_addr_diff_uid);
|
||||
status = key_reset_trust(session, diff_addr_diff_uid);
|
||||
assert(status == PEP_STATUS_OK || status == PEP_CANNOT_FIND_IDENTITY);
|
||||
assert(strcmp(diff_addr_diff_uid->fpr, fpr_diff_addr_diff_uid) == 0);
|
||||
cout << "Done!" << endl << endl;
|
||||
|
||||
message* msg_same_addr_same_uid = new_message(PEP_dir_outgoing);
|
||||
msg_same_addr_same_uid->from = main_me;
|
||||
msg_same_addr_same_uid->shortmsg = strdup("Greetings, humans!");
|
||||
msg_same_addr_same_uid->longmsg = strdup("This is a test of the emergency message system. This is only a test. BEEP.");
|
||||
msg_same_addr_same_uid->attachments = new_bloblist(NULL, 0, "application/octet-stream", NULL);
|
||||
|
||||
message* msg_same_addr_diff_uid = message_dup(msg_same_addr_same_uid);
|
||||
message* msg_diff_addr_same_uid = message_dup(msg_same_addr_same_uid);
|
||||
message* msg_diff_addr_diff_uid = message_dup(msg_same_addr_same_uid);
|
||||
|
||||
cout << "Starting tests..." << endl;
|
||||
// Case 1:
|
||||
// Same address, same user_id, untrusted
|
||||
cout << "Case 1: Same address, same user_id, untrusted" << endl;
|
||||
assert(msg_same_addr_same_uid);
|
||||
identity_list* to_list = new_identity_list(same_addr_same_uid);
|
||||
msg_same_addr_same_uid->to = to_list;
|
||||
message* enc_same_addr_same_uid_untrusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_same_addr_same_uid,
|
||||
&enc_same_addr_same_uid_untrusted,
|
||||
fpr_same_addr_same_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 1 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 2:
|
||||
// Same address, same_user_id, trusted
|
||||
cout << "Case 2: Same address, same user_id, trusted" << endl;
|
||||
status = trust_personal_key(session, same_addr_same_uid);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
message* enc_same_addr_same_uid_trusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_same_addr_same_uid,
|
||||
&enc_same_addr_same_uid_trusted,
|
||||
fpr_same_addr_same_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 2 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_STATUS_OK);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 3:
|
||||
// Different address, same user_id, untrusted
|
||||
cout << "Case 3: Different address, same user_id, untrusted" << endl;
|
||||
assert(msg_diff_addr_same_uid);
|
||||
identity_list* to_list_1 = new_identity_list(diff_addr_same_uid);
|
||||
msg_diff_addr_same_uid->to = to_list_1;
|
||||
message* enc_diff_addr_same_uid_untrusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_diff_addr_same_uid,
|
||||
&enc_diff_addr_same_uid_untrusted,
|
||||
fpr_diff_addr_same_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 3 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 4:
|
||||
// Different address, same user_id, trusted
|
||||
cout << "Case 4: Different address, same user_id, trusted" << endl;
|
||||
status = trust_personal_key(session, diff_addr_same_uid);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
message* enc_diff_addr_same_uid_trusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_diff_addr_same_uid,
|
||||
&enc_diff_addr_same_uid_trusted,
|
||||
fpr_diff_addr_same_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 4 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 5:
|
||||
// Same address, different user_id, untrusted
|
||||
cout << "Case 5: Same address, different user_id, untrusted" << endl;
|
||||
assert(msg_same_addr_diff_uid);
|
||||
identity_list* to_list_2 = new_identity_list(same_addr_diff_uid);
|
||||
msg_same_addr_diff_uid->to = to_list_2;
|
||||
message* enc_same_addr_diff_uid_untrusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_same_addr_diff_uid,
|
||||
&enc_same_addr_diff_uid_untrusted,
|
||||
fpr_same_addr_diff_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 5 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 6:
|
||||
// Same address, different user_id, trusted
|
||||
cout << "Case 6: Same address, different user_id, trusted" << endl;
|
||||
status = trust_personal_key(session, same_addr_diff_uid);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
message* enc_same_addr_diff_uid_trusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_same_addr_diff_uid,
|
||||
&enc_same_addr_diff_uid_untrusted,
|
||||
fpr_same_addr_diff_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 6 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 7:
|
||||
// Different address, different user_id, untrusted
|
||||
cout << "Case 7: Different address, different user_id, untrusted" << endl;
|
||||
assert(msg_diff_addr_diff_uid);
|
||||
identity_list* to_list_3 = new_identity_list(diff_addr_diff_uid);
|
||||
msg_diff_addr_diff_uid->to = to_list_3;
|
||||
message* enc_diff_addr_diff_uid_untrusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_diff_addr_diff_uid,
|
||||
&enc_diff_addr_diff_uid_untrusted,
|
||||
fpr_diff_addr_diff_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 7 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
// Case 8:
|
||||
// Different address, different user_id, trusted
|
||||
cout << "Case 8: Different address, different user_id, trusted" << endl;
|
||||
status = trust_personal_key(session, diff_addr_diff_uid);
|
||||
assert(status == PEP_STATUS_OK);
|
||||
message* enc_diff_addr_diff_uid_trusted = NULL;
|
||||
status = encrypt_message_and_add_priv_key(session,
|
||||
msg_diff_addr_diff_uid,
|
||||
&enc_diff_addr_diff_uid_trusted,
|
||||
fpr_diff_addr_diff_uid,
|
||||
PEP_enc_PGP_MIME,
|
||||
0);
|
||||
|
||||
cout << "Case 8 Status: " << tl_status_string(status) << endl;
|
||||
assert(status == PEP_ILLEGAL_VALUE);
|
||||
cout << "PASS!" << endl;
|
||||
|
||||
cout << "Correctly encrypted message:" << endl << endl;
|
||||
char* encrypted_msg_text = NULL;
|
||||
mime_encode_message(enc_same_addr_same_uid_trusted, false, &encrypted_msg_text);
|
||||
cout << encrypted_msg_text << endl << endl;
|
||||
|
||||
// FIXME: Free all the damned things
|
||||
|
||||
release(session);
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
|
||||
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
|
||||
k4Ovdx8fotrONgZ5tXgu7cF/HLZw
|
||||
=l1fW
|
||||
-----END PGP PRIVATE KEY BLOCK-----
|
@ -0,0 +1,63 @@
|
||||
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
|
||||
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
|
||||
4bhg7xfj/7Tg5HAey2fWmMZIfAqdxW+DJtJJ8g==
|
||||
=lesn
|
||||
-----END PGP PRIVATE KEY BLOCK-----
|
@ -0,0 +1,63 @@
|
||||
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
|
||||
lQOYBFrPrZMBCADHliMZZczNc2nXrm+SwDpVekZ7Uz/m2nRRmhH7OCnvIIw4zda3
|
||||
QDvmJbGKRnlOkAGn7+WoZcmPqu5lfJHzC02sfhqCrGaqdb7RDkYGhulTtgwxf/GV
|
||||
QGEgroQvDKLLRVAcE/rhIbz9stlWPMLwNlkvfXwGi+q5h2AxIA4uDnx9YcrK0NTz
|
||||
5F/RCXm/yw/DxTlCK66RdWk1ysmvWGeEkwB8/0lVcgNpifSMc6LhChotGnwxLJe1
|
||||
fhOTcsep8TdaJ2LHzrSO2rzx8rzMkHCpWrw71vWs1XhO7wTgvptOMDNuXsp4Pzyb
|
||||
VFsEviWhUJoC5Zf1QF+jwyqm+WWaqr5e38hxABEBAAEAB/0cvngum7Urr6ACMnqa
|
||||
IXolPldxQnOVDUgsSmqlihir+j2Hnsl6GdOmmS4hEnY9BMtgQtIJ9yLYwI7V6eNh
|
||||
I/MbUQwDXs3oZc3F8O7P2NU4u6K07E7AJoX2fXvHBORbLw/TA2Oh0ciUpxHa9CRF
|
||||
ESa2CrX2gWccMi191baFFowCSHZWN/7lG9o6txO0hKcgQ1Ix8BA0gbYlZgGHfS5f
|
||||
1XU4eQSAhUCNjxmP3r5Yaef2SxdCQ7SS+5ihtVv6MUrFs73lgZr/ymJKrbkBU0SA
|
||||
P7EuHLM0GUW8crRJx4WnSLbsS2A9DcKhz3oSeWKyGiujPo7/H70jMmK61qEGqBP+
|
||||
OG0rBADN4T+Z0OMApDX2kO97oHnN7jLvq6KEIOg+koMy9E4F+VVD5NXxkho8gFuD
|
||||
cb7ImEojcwAX5k58Q8HxwD+p0tr24A3N/J38KK/nT8RbwL9X3t/615EtrvUhMGX2
|
||||