The test arecarried out with the following two devices. aTalk client has reflection implementation as mentioned in
Devices under test:
a. N3 - firstname.lastname@example.org(Note3-aTalk)
b. S3 - email@example.com(S3-aTalk)
Initially N3 and S3 are setup to communicate in Omemo mode and olmMessages sending between them are working as expected.
Then performed an omemoDevice regeneration on S3. Check S3 sqlite database, and confirm all tables are correctly updated with the appropriate data for the new deviceID. S3 also publishes its new bundle data onto the xmpp server. However it was found that the server DeviceList is left untouched and still contains the old deviceID's.
When an olmMessage is sent from S3, its sid reflected the new generated deviceID. N3 detects the new deviceID is not in its database, and sends RatchetUpdateMessage.
07-24 21:36:05.509 D/SMACK: RECV (0): MwohBTukbWgBtdyMtlcLZumk3RRupsb5u+/KyTzyycJtyYwtEAEYASIwqdbm5e CLOfNC4rv4c+V9WBh1BsQDMQZdQBCqohFi4OQZpNJhZUBGreN+LgyQQLa4vTKVfRx+FhI= Jp5P+T5GPo7Qr1UFkIE6Uw==OX97sw==I sent you an OMEMO encrypted message but your client doesn’t seem to support that. Find more information on https://conversations.im/omemo849f7ecd-1fd8-400f-8180-b20218f6de01
07-24 21:36:05.589 W/αTalk:  org.jivesoftware.smackx.omemo.OmemoStore.getOmemoSessionOf() getOmemoSessionOf could not load identityKey of firstname.lastname@example.org:949870470: Loaded OMEMO IdentityKey is null for: email@example.com:949870470
07-24 21:36:05.589 I/αTalk:  org.jivesoftware.smackx.omemo.OmemoStore.getOmemoSessionOf() getOmemoSessionOf couldn't find an identityKey for firstname.lastname@example.org:949870470. Initiate session without.
07-24 21:36:05.599 W/αTalk:  org.jivesoftware.smackx.omemo.OmemoStore.getOmemoSessionOf() Can't update IdentityKey of email@example.com:949870470: Loaded OMEMO IdentityKey is null for: firstname.lastname@example.org:949870470
07-24 21:36:05.599 I/αTalk:  org.jivesoftware.smackx.omemo.OmemoService.processStanza() Received message with invalid session from email@example.com:949870470. Send RatchetUpdateMessage.
The S3 new bundle preKeys are then fetched from server and updated to its N3 tables. N3 then re-established new session with S3 new the deviceID.
07-24 21:36:05.629 D/SMACK: SENT (0):
07-24 21:36:05.709 D/SMACK: RECV (0): 01creation@001500:903258:096289creation@001500:903258:096 289BXBo2hKtYkXTfncroIgIO5JillmvK4Mb75C1YavoHG0sBOjGMufrfrIDby06cBbCoHdw0Le5LykV8aPFwboHff4yhtA5/qVA 3VQL+BnhByI1ODkzWdTFcgKxpJkb13tEDg==BXLVgGw HJEUdquvvtJKRVEXuJPXZHm+vAYNP/YCpDOw5BYXM7QFTXUAyyH6VzJQTsDtKppdzKuLKF7cwRp7+2uMp<preKey Public
07-24 21:36:06.089 I/αTalk:  org.jivesoftware.smackx.omemo.OmemoService.processBundle() Session built with firstname.lastname@example.org:949870470
Send omemo message from N3 will prompt user to authenticate the new deviceID fingerprint.
07-24 21:36:06.089 W/αTalk:  org.jivesoftware.smackx.omemo.OmemoService.processStanza() internal omemoMessageListener failed to establish a session for incoming OMEMO message: org.whispersystems.libsignal.NoSessionException: No session for: email@example.com:949870470
07-24 21:42:53.879 I/αTalk:  org.atalk.android.aTalkApp.setCurrentActivity().323 Current activity set to org.atalk.crypto.omemo.OmemoAuthenticateDialog@35d158f9
In order for N3 to build the olmMessage for all the required recipients, it also proceeds to fetch the deviceList.
07-24 21:43:00.149 D/SMACK: SENT (0):
07-24 21:43:00.169 D/SMACK: RECV (0): 11creation@001500:891555:861306creation@001500:891555:861 306
However since the DeviceList has not being updated by S3, all olmMessages created are without the new
07-24 21:46:27.249 D/SMACK: SENT (0): I sent you an OMEMO encrypted message but your client doesn’t seem to support that. Find more information on https://conversations.im/omemo25081f9e-474a-4530-b543-9a0119f72513MwohBczmmmQL93WTEseJqtqmbx2WCL7Od+3buZiarfVJhgcMEAEYASIwyBMV+t7Li+UNqDViMtt0Az03 fdTWD+563pWE7QhE9bHpKu3Q8OQlGZ20h+4MIc74+BbnEopyH2s=MwohBQIJPQbsCh74AsZCpMg7dIjQNZi4QD8+p9DNip4yZhsqEB0YAyIw7katLPldTE169ETsVVnNSwUC 5Ou3XJimAyR/ao5fjLIKDQTVa7sgoqHBT3VaNBcxsAccsA6M59E=FlCdRUh7DUZzTiyHGf CJfA==HJ94NQ==
Therefore N3 and S3 omemo session cannot proceed further. S3 must restarts in order to get subscribeToDeviceLists() to update the DeviceList on the server.
Note: atalk must implement as per below link to get subscribeToDeviceLists() to work properly.