parent
be6a61d80f
commit
563f78d763
@ -1,7 +1,7 @@
|
||||
BUILD_ON=$(shell uname)
|
||||
BUILD_FOR=$(BUILD_ON)
|
||||
OPTIMIZE=-g -O0
|
||||
#OPTIMIZE=-O3 -DNDEBUG
|
||||
#OPTIMIZE=-g -O0
|
||||
OPTIMIZE=-O3 -DNDEBUG
|
||||
# the next two lines are ignored on Windoze
|
||||
SYSTEM_DB=/usr/local/share/pEp/system.db
|
||||
PREFIX=$(HOME)
|
||||
|
@ -0,0 +1,106 @@
|
||||
#include "message_api.h"
|
||||
#include "keymanagement.h"
|
||||
|
||||
#include <libetpan/libetpan.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
PEP_STATUS encrypt_message(
|
||||
PEP_SESSION session,
|
||||
const message *src,
|
||||
stringlist_t * extra,
|
||||
message **dst
|
||||
)
|
||||
{
|
||||
PEP_STATUS status = PEP_STATUS_OK;
|
||||
|
||||
assert(session);
|
||||
assert(src);
|
||||
assert(dst);
|
||||
*dst = NULL;
|
||||
|
||||
message *msg = new_message(src->dir, src->from, src->to, NULL);
|
||||
if (msg == NULL)
|
||||
return PEP_OUT_OF_MEMORY;
|
||||
|
||||
src->from->me = true;
|
||||
|
||||
status = myself(session, src->from);
|
||||
if (status != PEP_STATUS_OK) {
|
||||
free_message(msg);
|
||||
return status;
|
||||
}
|
||||
|
||||
stringlist_t * keys = new_stringlist(src->from->fpr);
|
||||
if (keys == NULL) {
|
||||
free_message(msg);
|
||||
return PEP_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
stringlist_t *_x;
|
||||
for (_x = extra; _x && _x->value; _x = _x->next) {
|
||||
if (stringlist_add(keys, _x->value) == NULL) {
|
||||
free_message(msg);
|
||||
free_stringlist(keys);
|
||||
return PEP_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
|
||||
identity_list * _il;
|
||||
for (_il = src->to; _il && _il->ident; _il = _il->next) {
|
||||
status = update_identity(session, _il->ident);
|
||||
if (status != PEP_STATUS_OK) {
|
||||
free_message(msg);
|
||||
free_stringlist(keys);
|
||||
return status;
|
||||
}
|
||||
if (_il->ident->fpr) {
|
||||
if (stringlist_add(keys, _il->ident->fpr) == NULL) {
|
||||
free_message(msg);
|
||||
free_stringlist(keys);
|
||||
return PEP_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
else
|
||||
status = PEP_KEY_NOT_FOUND;
|
||||
}
|
||||
|
||||
int _own_keys = 1;
|
||||
if (extra)
|
||||
_own_keys += stringlist_length(extra);
|
||||
|
||||
if (stringlist_length(keys) > _own_keys) {
|
||||
char *ptext = NULL;
|
||||
char *ctext = NULL;
|
||||
size_t csize = 0;
|
||||
|
||||
// TODO: set ptext to MIME text
|
||||
|
||||
status = encrypt_and_sign(session, keys, ptext, strlen(ptext), &ctext, &csize);
|
||||
if (ctext) {
|
||||
msg->longmsg = ctext;
|
||||
msg->longmsg_size = csize;
|
||||
*dst = msg;
|
||||
}
|
||||
else
|
||||
free_message(msg);
|
||||
free(ptext);
|
||||
}
|
||||
else
|
||||
free_message(msg);
|
||||
|
||||
free_stringlist(keys);
|
||||
return status;
|
||||
}
|
||||
|
||||
PEP_STATUS decrypt_message(
|
||||
PEP_SESSION session,
|
||||
const message *src,
|
||||
message **dst
|
||||
)
|
||||
{
|
||||
PEP_STATUS status = PEP_STATUS_OK;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "transport.h"
|
||||
|
||||
PEP_STATUS encrypt_message(
|
||||
PEP_SESSION session,
|
||||
const message *src,
|
||||
stringlist_t *extra,
|
||||
message **dst
|
||||
);
|
||||
|
||||
PEP_STATUS decrypt_message(
|
||||
PEP_SESSION session,
|
||||
const message *src,
|
||||
message **dst
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in new issue