@ -0,0 +1,478 @@ | |||
// This file is under GNU General Public License 3.0 | |||
// see LICENSE.txt | |||
#include "pEp_internal.h" | |||
#include "dynamic_api.h" | |||
#include "message_api.h" | |||
#include <string.h> | |||
#include <stdlib.h> | |||
PEP_STATUS has_key_reset_been_sent( | |||
PEP_SESSION session, | |||
const char* user_id, | |||
const char* revoked_fpr, | |||
bool* contacted) | |||
{ | |||
assert(session); | |||
assert(contacted); | |||
assert(user_id); | |||
assert(revoked_fpr); | |||
assert(!EMPTYSTR(user_id)); | |||
if (!session || !contacted || EMPTYSTR(revoked_fpr) || EMPTYSTR(user_id)) | |||
return PEP_ILLEGAL_VALUE; | |||
*contacted = false; | |||
char* alias_default = NULL; | |||
PEP_STATUS status = get_userid_alias_default(session, user_id, &alias_default); | |||
if (status == PEP_CANNOT_FIND_ALIAS || EMPTYSTR(alias_default)) { | |||
free(alias_default); | |||
alias_default = strdup(user_id); | |||
} | |||
sqlite3_reset(session->was_id_for_revoke_contacted); | |||
sqlite3_bind_text(session->was_id_for_revoke_contacted, 1, revoked_fpr, -1, | |||
SQLITE_STATIC); | |||
sqlite3_bind_text(session->was_id_for_revoke_contacted, 2, user_id, -1, | |||
SQLITE_STATIC); | |||
int result = sqlite3_step(session->was_id_for_revoke_contacted); | |||
switch (result) { | |||
case SQLITE_ROW: { | |||
*contacted = (sqlite3_column_int(session->was_id_for_revoke_contacted, 0) != 0); | |||
break; | |||
} | |||
default: | |||
sqlite3_reset(session->was_id_for_revoke_contacted); | |||
free(alias_default); | |||
return PEP_UNKNOWN_DB_ERROR; | |||
} | |||
sqlite3_reset(session->was_id_for_revoke_contacted); | |||
return PEP_STATUS_OK; | |||
} | |||
//static const char *sql_set_revoke_contact_as_notified = | |||
// "insert or replace into revocation_contact_list(fpr, contact_id) values (?1, ?2) ;"; | |||
PEP_STATUS set_reset_contact_notified( | |||
PEP_SESSION session, | |||
const char* revoke_fpr, | |||
const char* contact_id | |||
) | |||
{ | |||
PEP_STATUS status = PEP_STATUS_OK; | |||
assert(session && !EMPTYSTR(revoke_fpr) && !EMPTYSTR(contact_id)); | |||
if (!session || EMPTYSTR(revoke_fpr) || EMPTYSTR(contact_id)) | |||
return PEP_ILLEGAL_VALUE; | |||
sqlite3_reset(session->set_revoke_contact_as_notified); | |||
sqlite3_bind_text(session->set_revoke_contact_as_notified, 1, revoke_fpr, -1, | |||
SQLITE_STATIC); | |||
sqlite3_bind_text(session->set_revoke_contact_as_notified, 2, contact_id, -1, | |||
SQLITE_STATIC); | |||
int result; | |||
result = sqlite3_step(session->set_revoke_contact_as_notified); | |||
switch (result) { | |||
case SQLITE_DONE: | |||
status = PEP_STATUS_OK; | |||
break; | |||
default: | |||
status = PEP_UNKNOWN_DB_ERROR; | |||
} | |||
sqlite3_reset(session->set_revoke_contact_as_notified); | |||
return status; | |||
} | |||
PEP_STATUS receive_key_reset(PEP_SESSION session, | |||
message* reset_msg) { | |||
if (!session || !reset_msg) | |||
return PEP_ILLEGAL_VALUE; | |||
pEp_identity* sender_id = reset_msg->from; | |||
if (!sender_id) | |||
return PEP_MALFORMED_KEY_RESET_MSG; | |||
PEP_STATUS status = update_identity(session, sender_id); | |||
if (!sender_id->user_id) | |||
return PEP_UNKNOWN_ERROR; | |||
if (is_me(session, sender_id)) | |||
return PEP_ILLEGAL_VALUE; | |||
if (!reset_msg->longmsg || strncmp(reset_msg->longmsg, "OLD: ", 5) != 0) | |||
return PEP_MALFORMED_KEY_RESET_MSG; | |||
status = PEP_STATUS_OK; | |||
char* old_fpr = NULL; | |||
char* new_fpr = NULL; | |||
stringlist_t* keylist = NULL; | |||
pEp_identity* temp_ident = identity_dup(sender_id); | |||
if (!temp_ident) { | |||
status = PEP_OUT_OF_MEMORY; | |||
goto pep_free; | |||
} | |||
char* rest = NULL; | |||
char* p = strtok_r(reset_msg->longmsg, "\r\n", &rest); | |||
if (!EMPTYSTR(p + 5)) | |||
old_fpr = strdup(p + 5); | |||
else { | |||
status = PEP_MALFORMED_KEY_RESET_MSG; | |||
goto pep_free; | |||
} | |||
bool own_key = false; | |||
status = is_own_key(session, old_fpr, &own_key); | |||
if (own_key) { | |||
// Nope, no one can make us our own default. If we want to do that, | |||
// that's keysync, NOT key reset. | |||
status = PEP_ILLEGAL_VALUE; | |||
goto pep_free; | |||
} | |||
p = strtok_r(NULL, "\r\n", &rest); | |||
if (strncmp(p, "NEW: ", 5) != 0 || EMPTYSTR(p + 5)) { | |||
status = PEP_MALFORMED_KEY_RESET_MSG; | |||
goto pep_free; | |||
} | |||
new_fpr = strdup(p + 5); | |||
// Reset the original key | |||
status = key_reset(session, old_fpr, temp_ident); | |||
if (status != PEP_STATUS_OK) | |||
goto pep_free; | |||
status = find_keys(session, new_fpr, &keylist); | |||
if (status != PEP_STATUS_OK) | |||
goto pep_free; | |||
if (!keylist) { | |||
status = PEP_KEY_NOT_FOUND; | |||
goto pep_free; | |||
} | |||
// alright, we've checked as best we can. Let's set that baby. | |||
sender_id->fpr = new_fpr; | |||
// This only sets as the default, does NOT TRUST IN ANY WAY | |||
sender_id->comm_type = sender_id->comm_type & (~PEP_ct_confirmed); | |||
status = set_identity(session, sender_id); | |||
sender_id->fpr = NULL; // ownership for free | |||
pep_free: | |||
free_stringlist(keylist); | |||
free(old_fpr); | |||
free(new_fpr); | |||
free_identity(temp_ident); | |||
return status; | |||
} | |||
PEP_STATUS create_standalone_key_reset_message(PEP_SESSION session, | |||
message** dst, | |||
pEp_identity* recip, | |||
const char* old_fpr, | |||
const char* new_fpr) { | |||
if (!dst || !recip->user_id || !recip->address) | |||
return PEP_ILLEGAL_VALUE; | |||
if (!old_fpr || !new_fpr) | |||
return PEP_ILLEGAL_VALUE; | |||
*dst = NULL; | |||
// Get own identity user has corresponded with | |||
pEp_identity* own_identity = NULL; | |||
PEP_STATUS status = get_own_ident_for_contact_id(session, | |||
recip, | |||
&own_identity); | |||
if (status != PEP_STATUS_OK) | |||
return status; | |||
message* reset_message = new_message(PEP_dir_outgoing); | |||
reset_message->from = own_identity; | |||
reset_message->to = new_identity_list(identity_dup(recip)); // ? | |||
const char* oldtag = "OLD: "; | |||
const char* newtag = "\nNEW: "; | |||
const size_t taglens = 11; | |||
size_t full_len = taglens + strlen(old_fpr) + strlen(new_fpr) + 2; // \n and \0 | |||
char* longmsg = calloc(full_len, 1); | |||
strlcpy(longmsg, oldtag, full_len); | |||
strlcat(longmsg, old_fpr, full_len); | |||
strlcat(longmsg, newtag, full_len); | |||
strlcat(longmsg, new_fpr, full_len); | |||
strlcat(longmsg, "\n", full_len); | |||
reset_message->longmsg = longmsg; | |||
reset_message->shortmsg = strdup("Key reset"); | |||
message* output_msg = NULL; | |||
status = encrypt_message(session, reset_message, NULL, | |||
&output_msg, PEP_enc_PGP_MIME, | |||
PEP_encrypt_flag_key_reset_only); | |||
if (status == PEP_STATUS_OK) | |||
*dst = output_msg; | |||
free_message(reset_message); | |||
return status; | |||
} | |||
PEP_STATUS send_key_reset_to_recents(PEP_SESSION session, | |||
const char* old_fpr, | |||
const char* new_fpr) { | |||
assert(old_fpr); | |||
assert(new_fpr); | |||
assert(session); | |||
assert(session->messageToSend || session->sync_session->messageToSend); | |||
if (!session || !old_fpr || !new_fpr) | |||
return PEP_ILLEGAL_VALUE; | |||
messageToSend_t send_cb = send_cb = session->messageToSend; | |||
void* sync_obj = session->sync_obj; | |||
if (!send_cb) { | |||
send_cb = session->sync_session->messageToSend; | |||
sync_obj = session->sync_session->sync_obj; | |||
} | |||
if (!send_cb) | |||
return PEP_SYNC_NO_MESSAGE_SEND_CALLBACK; | |||
identity_list* recent_contacts = NULL; | |||
message* reset_msg = NULL; | |||
PEP_STATUS status = get_last_contacted(session, &recent_contacts); | |||
if (status != PEP_STATUS_OK) | |||
goto pep_free; | |||
identity_list* curr_id_ptr = recent_contacts; | |||
for (curr_id_ptr = recent_contacts; curr_id_ptr; curr_id_ptr = curr_id_ptr->next) { | |||
pEp_identity* curr_id = curr_id_ptr->ident; | |||
if (!curr_id) | |||
break; | |||
const char* user_id = curr_id->user_id; | |||
// Should be impossible, but? | |||
if (!user_id) | |||
continue; | |||
// Check if it's us - if so, pointless... | |||
if (is_me(session, curr_id)) | |||
continue; | |||
// Check if they've already been told - this shouldn't be the case, but... | |||
bool contacted = false; | |||
status = has_key_reset_been_sent(session, user_id, old_fpr, &contacted); | |||
if (status != PEP_STATUS_OK) | |||
goto pep_free; | |||
if (contacted) | |||
continue; | |||
// if not, make em a message | |||
reset_msg = NULL; | |||
status = create_standalone_key_reset_message(session, | |||
&reset_msg, | |||
curr_id, | |||
old_fpr, | |||
new_fpr); | |||
if (status == PEP_CANNOT_FIND_IDENTITY) { // this is ok, just means we never mailed them | |||
status = PEP_STATUS_OK; | |||
continue; | |||
} | |||
if (status != PEP_STATUS_OK) { | |||
free(reset_msg); | |||
goto pep_free; | |||
} | |||
// insert into queue | |||
status = send_cb(sync_obj, reset_msg); | |||
if (status != PEP_STATUS_OK) { | |||
free(reset_msg); | |||
goto pep_free; | |||
} | |||
// Put into notified DB | |||
status = set_reset_contact_notified(session, old_fpr, user_id); | |||
if (status != PEP_STATUS_OK) | |||
goto pep_free; | |||
} | |||
pep_free: | |||
free_identity_list(recent_contacts); | |||
return status; | |||
} | |||
DYNAMIC_API PEP_STATUS key_reset( | |||
PEP_SESSION session, | |||
const char* key_id, | |||
pEp_identity* ident | |||
) | |||
{ | |||
if (!session) | |||
return PEP_ILLEGAL_VALUE; | |||
PEP_STATUS status = PEP_STATUS_OK; | |||
char* fpr_copy = NULL; | |||
char* own_id = NULL; | |||
char* new_key = NULL; | |||
identity_list* key_idents = NULL; | |||
stringlist_t* keys = NULL; | |||
if (!EMPTYSTR(key_id)) { | |||
fpr_copy = strdup(key_id); | |||
if (!fpr_copy) | |||
return PEP_OUT_OF_MEMORY; | |||
} | |||
if (!ident) { | |||
// Get list of own identities | |||
status = get_default_own_userid(session, &own_id); | |||
if (status != PEP_STATUS_OK) | |||
goto pep_free; | |||
if (EMPTYSTR(fpr_copy)) { | |||
status = get_all_keys_for_user(session, own_id, &keys); | |||
if (status == PEP_STATUS_OK) { | |||
stringlist_t* curr_key; | |||
for (curr_key = keys; curr_key && curr_key->value; curr_key = curr_key->next) { | |||
status = key_reset(session, curr_key->value, NULL); | |||
if (status != PEP_STATUS_OK) | |||
break; | |||
} | |||
} | |||
goto pep_free; | |||
} // otherwise, we have a specific fpr to process | |||
// fpr_copy exists, so... let's go. | |||
// Process own identities with this fpr | |||
status = get_identities_by_main_key_id(session, fpr_copy, &key_idents); | |||
if (status == PEP_STATUS_OK) { | |||
// have ident list, or should | |||
identity_list* curr_ident; | |||
for (curr_ident = key_idents; curr_ident && curr_ident->ident; | |||
curr_ident = curr_ident->next) { | |||
pEp_identity* this_identity = curr_ident->ident; | |||
status = key_reset(session, fpr_copy, this_identity); | |||
if (status != PEP_STATUS_OK) | |||
break; | |||
} | |||
} | |||
goto pep_free; | |||
} | |||
else { // an identity was specified. | |||
if (is_me(session, ident)) { | |||
// FIXME: make sure this IS our fpr? | |||
// If it got sent in with an empty fpr... | |||
if (EMPTYSTR(fpr_copy)) { | |||
// | |||
// if (!EMPTYSTR(ident->fpr)) | |||
// fpr_copy = strdup(ident->fpr); | |||
status = _myself(session, ident, false, true); | |||
if (status == PEP_STATUS_OK && ident->fpr) | |||
fpr_copy = strdup(ident->fpr); | |||
else { | |||
// last resort? | |||
// Get list of own identities | |||
char* own_id = NULL; | |||
status = get_default_own_userid(session, &own_id); | |||
if (status == PEP_STATUS_OK) | |||
status = get_user_default_key(session, own_id, &fpr_copy); | |||
if (status != PEP_STATUS_OK || EMPTYSTR(fpr_copy)) { | |||
free(own_id); | |||
return (status == PEP_STATUS_OK ? PEP_KEY_NOT_FOUND : status); | |||
} | |||
} | |||
} | |||
free(ident->fpr); | |||
ident->fpr = fpr_copy; | |||
// Create revocation | |||
status = revoke_key(session, fpr_copy, NULL); | |||
// generate new key | |||
if (status == PEP_STATUS_OK) { | |||
ident->fpr = NULL; | |||
status = generate_keypair(session, ident); | |||
} | |||
if (status == PEP_STATUS_OK) { | |||
new_key = strdup(ident->fpr); | |||
status = set_own_key(session, ident, new_key); | |||
} | |||
// mistrust fpr from trust | |||
ident->fpr = fpr_copy; | |||
ident->comm_type = PEP_ct_mistrusted; | |||
status = set_trust(session, ident); | |||
ident->fpr = NULL; | |||
// Done with old use of ident. | |||
if (status == PEP_STATUS_OK) { | |||
// Update fpr for outgoing | |||
status = myself(session, ident); | |||
} | |||
if (status == PEP_STATUS_OK) | |||
// cascade that mistrust for anyone using this key | |||
status = mark_as_compromised(session, fpr_copy); | |||
if (status == PEP_STATUS_OK) | |||
status = remove_fpr_as_default(session, fpr_copy); | |||
if (status == PEP_STATUS_OK) | |||
status = add_mistrusted_key(session, fpr_copy); | |||
// add to revocation list | |||
if (status == PEP_STATUS_OK) | |||
status = set_revoked(session, fpr_copy, new_key, time(NULL)); | |||
// for all active communication partners: | |||
// active_send revocation | |||
if (status == PEP_STATUS_OK) | |||
status = send_key_reset_to_recents(session, fpr_copy, new_key); | |||
} | |||
else { // not is_me | |||
// remove fpr from all identities | |||
// remove fpr from all users | |||
if (status == PEP_STATUS_OK) | |||
status = remove_fpr_as_default(session, fpr_copy); | |||
// delete key from DB | |||
if (status == PEP_STATUS_OK) {}; | |||
// status = delete_keypair(session, fpr_copy); | |||
// N.B. If this key is being replaced by something else, it | |||
// is done outside of this function. | |||
} | |||
} | |||
pep_free: | |||
free(fpr_copy); | |||
free(own_id); | |||
free_identity_list(key_idents); | |||
free_stringlist(keys); | |||
free(new_key); | |||
return status; | |||
} |
@ -0,0 +1,93 @@ | |||
// This file is under GNU General Public License 3.0 | |||
// see LICENSE.txt | |||
#pragma once | |||
#include "key_reset.h" | |||
#include "pEpEngine.h" | |||
#include "keymanagement.h" | |||
#include "message.h" | |||
#include "message_api.h" | |||
#include "cryptotech.h" | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
// FIXME: Proper docs! | |||
// Algorithm: | |||
// | |||
// Key Reset trigger; either manually or in another protocol, parameter key (optional) | |||
// | |||
// if identity given: | |||
// | |||
// key reset for one identity | |||
// | |||
// else | |||
// | |||
// For identity in own identities | |||
// | |||
// key reset for one identitiy | |||
// | |||
// Key Reset for identity: | |||
// | |||
// if own identity: | |||
// | |||
// Create revocation | |||
// | |||
// add to revocation list | |||
// | |||
// mistrust fpr from trust | |||
// | |||
// Remove fpr from ALL identities | |||
// | |||
// Remove fpr from ALL users | |||
// | |||
// generate new key | |||
// | |||
// for all active communication partners: | |||
// | |||
// active_send revocation | |||
// | |||
// else | |||
// | |||
// remove fpr from all identities | |||
// | |||
// remove fpr from all users | |||
// | |||
// delete key from key ring | |||
DYNAMIC_API PEP_STATUS key_reset( | |||
PEP_SESSION session, | |||
const char* fpr, | |||
pEp_identity* ident | |||
); | |||
PEP_STATUS has_key_reset_been_sent( | |||
PEP_SESSION session, | |||
const char* user_id, | |||
const char* revoked_fpr, | |||
bool* contacted); | |||
PEP_STATUS set_reset_contact_notified( | |||
PEP_SESSION session, | |||
const char* revoke_fpr, | |||
const char* contact_id | |||
); | |||
PEP_STATUS receive_key_reset(PEP_SESSION session, | |||
message* reset_msg); | |||
PEP_STATUS create_standalone_key_reset_message(PEP_SESSION session, | |||
message** dst, | |||
pEp_identity* recip, | |||
const char* old_fpr, | |||
const char* new_fpr); | |||
PEP_STATUS send_key_reset_to_recents(PEP_SESSION session, | |||
const char* old_fpr, | |||
const char* new_fpr); | |||
#ifdef __cplusplus | |||
} | |||
#endif |
@ -0,0 +1,87 @@ | |||
Message-ID: <pEp.PEW827.18NQTABD97IHX.3E6116A3-906D-4DAD-8BDD-3381606B4302@pep-project.org> | |||
From: Gabi <pep-test-gabrielle@pep-project.org> | |||
To: Alice is tired of Bob <pep.test.alice@pep-project.org> | |||
Subject: =?utf-8?Q?p=E2=89=A1p?= | |||
X-pEp-Version: 2.0 | |||
MIME-Version: 1.0 | |||
Content-Type: multipart/encrypted; boundary="d39e5287be3847623f45c9767504e45"; | |||
protocol="application/pgp-encrypted" | |||
--d39e5287be3847623f45c9767504e45 | |||
Content-Type: application/pgp-encrypted | |||
Version: 1 | |||
--d39e5287be3847623f45c9767504e45 | |||
Content-Type: application/octet-stream | |||
Content-Transfer-Encoding: 7bit | |||
Content-Disposition: inline; filename="msg.asc" | |||
-----BEGIN PGP MESSAGE----- | |||
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 | |||
6ihY | |||
=/YtR | |||
-----END PGP MESSAGE----- | |||
--d39e5287be3847623f45c9767504e45-- | |||
@ -0,0 +1,115 @@ | |||
From: Alice in Wonderland <pep.test.alice@pep-project.org> | |||
To: Bob's Burgers <pep.test.bob@pep-project.org> | |||
Subject: =?utf-8?Q?p=E2=89=A1p?= | |||
X-pEp-Version: 2.0 | |||
MIME-Version: 1.0 | |||
Content-Type: multipart/encrypted; boundary="41fb875950ea35e61360a605caa7977"; | |||
protocol="application/pgp-encrypted" | |||
--41fb875950ea35e61360a605caa7977 | |||
Content-Type: application/pgp-encrypted | |||
Version: 1 | |||
--41fb875950ea35e61360a605caa7977 | |||
Content-Type: application/octet-stream | |||
Content-Transfer-Encoding: 7bit | |||
Content-Disposition: inline; filename="msg.asc" | |||
-----BEGIN PGP MESSAGE----- | |||
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 | |||
ICgsOg1vvjXDZLqEyHrjxMCHpZiCNBksnQ== | |||
=0apO | |||
-----END PGP MESSAGE----- | |||
--41fb875950ea35e61360a605caa7977-- | |||
@ -0,0 +1,121 @@ | |||
Message-ID: <pEp.PEW17L.0RC7XPI9ZPB8X.97B39B40-10C2-404B-B8CC-54B79229F8FD@pep-project.org> | |||
From: Alice in Wonderland <pep.test.alice@pep-project.org> | |||
To: Fenris Leto Hawke <pep.test.fenris@thisstilldoesntwork.lu> | |||
Subject: =?utf-8?Q?p=E2=89=A1p?= | |||
X-pEp-Version: 2.0 | |||
MIME-Version: 1.0 | |||
Content-Type: multipart/encrypted; boundary="7e23a74c7397f0666f31d87d17b86a89"; | |||
protocol="application/pgp-encrypted" | |||
--7e23a74c7397f0666f31d87d17b86a89 | |||
Content-Type: application/pgp-encrypted | |||
Version: 1 | |||
--7e23a74c7397f0666f31d87d17b86a89 | |||
Content-Type: application/octet-stream | |||
Content-Transfer-Encoding: 7bit | |||
Content-Disposition: inline; filename="msg.asc" | |||
-----BEGIN PGP MESSAGE----- | |||
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 | |||
Gbdayy1g6mwuZA== | |||
=ncTl | |||
-----END PGP MESSAGE----- | |||
--7e23a74c7397f0666f31d87d17b86a89-- | |||