From 17d62921e9d2cfa8ade544c64a69d14d8ea66377 Mon Sep 17 00:00:00 2001 From: nandesu-utils <70854931+nandesu-utils@users.noreply.github.com> Date: Thu, 28 Oct 2021 04:01:07 +0900 Subject: [PATCH 1/2] Acquire sender's device list on connection After generation of an identity we observe that `omemo_ctx.device_list` has an entry for sender's jid. But on application restart it is absent thus messages are not encrypted for the rest set of sender devices. This commit fixes this by applying code for acquiring the aforementioned device list after the connection. --- src/omemo/omemo.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index e1126e62..273bbd21 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -84,6 +84,7 @@ static unsigned char* _omemo_fingerprint_decode(const char* const fingerprint, s static char* _omemo_unformat_fingerprint(const char* const fingerprint_formatted); static void _cache_device_identity(const char* const jid, uint32_t device_id, ec_public_key* identity); static void _g_hash_table_free(GHashTable* hash_table); +static void _omemo_sender_devices(void); typedef gboolean (*OmemoDeviceListHandler)(const char* const jid, GList* device_list); @@ -303,6 +304,9 @@ omemo_on_connect(ProfAccount* account) log_warning("[OMEMO] no such file: %s", omemo_ctx.trust_filename->str); g_error_free(error); } + + log_debug("[OMEMO] Acquiring sender devices for current account"); + _omemo_sender_devices(); } void @@ -384,15 +388,15 @@ omemo_publish_crypto_materials(void) return; } + omemo_bundle_publish(true); +} + +static void _omemo_sender_devices(void) { char* barejid = connection_get_barejid(); - /* Ensure we get our current device list, and it gets updated with our - * device_id */ g_hash_table_insert(omemo_ctx.device_list_handler, strdup(barejid), _handle_own_device_list); omemo_devicelist_request(barejid); - omemo_bundle_publish(true); - free(barejid); } From fee23b55f08c3635731aa625e31bd54f14282cb6 Mon Sep 17 00:00:00 2001 From: nandesu-utils <70854931+nandesu-utils@users.noreply.github.com> Date: Fri, 29 Oct 2021 01:15:55 +0900 Subject: [PATCH 2/2] Refined sender device acquirement Now the sender devices are acknowledged only after omemo is loaded. That is, after key generation has been completed or identity has been loaded. --- src/omemo/omemo.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index 273bbd21..4d53ad0c 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -84,7 +84,7 @@ static unsigned char* _omemo_fingerprint_decode(const char* const fingerprint, s static char* _omemo_unformat_fingerprint(const char* const fingerprint_formatted); static void _cache_device_identity(const char* const jid, uint32_t device_id, ec_public_key* identity); static void _g_hash_table_free(GHashTable* hash_table); -static void _omemo_sender_devices(void); +static void _acquire_sender_devices_list(void); typedef gboolean (*OmemoDeviceListHandler)(const char* const jid, GList* device_list); @@ -304,9 +304,6 @@ omemo_on_connect(ProfAccount* account) log_warning("[OMEMO] no such file: %s", omemo_ctx.trust_filename->str); g_error_free(error); } - - log_debug("[OMEMO] Acquiring sender devices for current account"); - _omemo_sender_devices(); } void @@ -391,7 +388,7 @@ omemo_publish_crypto_materials(void) omemo_bundle_publish(true); } -static void _omemo_sender_devices(void) { +static void _acquire_sender_devices_list(void) { char* barejid = connection_get_barejid(); g_hash_table_insert(omemo_ctx.device_list_handler, strdup(barejid), _handle_own_device_list); @@ -403,6 +400,11 @@ static void _omemo_sender_devices(void) { void omemo_start_sessions(void) { + // before any session may be started, a list on + // available sender devices must be acquired + log_debug("[OMEMO] Acquiring sender devices list"); + _acquire_sender_devices_list(); + GSList* contacts = roster_get_contacts(ROSTER_ORD_NAME); if (contacts) { GSList* curr;