about summary refs log tree commit diff stats
path: root/src/omemo
diff options
context:
space:
mode:
Diffstat (limited to 'src/omemo')
-rw-r--r--src/omemo/omemo.c2
-rw-r--r--src/omemo/omemo.h2
-rw-r--r--src/omemo/store.c12
-rw-r--r--src/omemo/store.h1
4 files changed, 10 insertions, 7 deletions
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);