From a650ecc67d700ae14a1bd05ca6196533829ba5ce Mon Sep 17 00:00:00 2001 From: Paul Fariello Date: Fri, 7 Jun 2019 23:53:44 +0200 Subject: Add trusted state after OMEMO decryption Use it to print message on red background if not trusted. --- src/omemo/omemo.c | 2 +- src/omemo/omemo.h | 2 +- src/omemo/store.c | 12 +++++++----- src/omemo/store.h | 1 + 4 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src/omemo') diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index 4b65aebb..ba17fe51 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -832,7 +832,7 @@ out: char * omemo_on_message_recv(const char *const from_jid, uint32_t sid, const unsigned char *const iv, size_t iv_len, GList *keys, - const unsigned char *const payload, size_t payload_len, gboolean muc) + const unsigned char *const payload, size_t payload_len, gboolean muc, gboolean *trusted) { unsigned char *plaintext = NULL; Jid *sender = NULL; diff --git a/src/omemo/omemo.h b/src/omemo/omemo.h index 0a98c568..ae25b5ba 100644 --- a/src/omemo/omemo.h +++ b/src/omemo/omemo.h @@ -91,4 +91,4 @@ void omemo_start_device_session(const char *const jid, uint32_t device_id, GList gboolean omemo_loaded(void); char * omemo_on_message_send(ProfWin *win, const char *const message, gboolean request_receipt, gboolean muc); -char * omemo_on_message_recv(const char *const from, uint32_t sid, const unsigned char *const iv, size_t iv_len, GList *keys, const unsigned char *const payload, size_t payload_len, gboolean muc); +char * omemo_on_message_recv(const char *const from, uint32_t sid, const unsigned char *const iv, size_t iv_len, GList *keys, const unsigned char *const payload, size_t payload_len, gboolean muc, gboolean *trusted); diff --git a/src/omemo/store.c b/src/omemo/store.c index 04704a0e..51d5e67a 100644 --- a/src/omemo/store.c +++ b/src/omemo/store.c @@ -395,10 +395,6 @@ is_trusted_identity(const signal_protocol_address *address, uint8_t *key_data, int ret; identity_key_store_t *identity_key_store = (identity_key_store_t *)user_data; - if (identity_key_store->recv) { - return true; - } - GHashTable *trusted = g_hash_table_lookup(identity_key_store->trusted, address->name); if (!trusted) { if (identity_key_store->recv) { @@ -416,7 +412,13 @@ is_trusted_identity(const signal_protocol_address *address, uint8_t *key_data, signal_buffer_free(buffer); - return ret; + + if (identity_key_store->recv) { + identity_key_store->trusted = ret; + return 1; + } else { + return ret; + } } int diff --git a/src/omemo/store.h b/src/omemo/store.h index f3a9274a..628b1df9 100644 --- a/src/omemo/store.h +++ b/src/omemo/store.h @@ -49,6 +49,7 @@ typedef struct { uint32_t registration_id; GHashTable *trusted; bool recv; + bool trusted; } identity_key_store_t; GHashTable * session_store_new(void); -- cgit 1.4.1-2-gfad0