From 73fd93148ad012dc0f4ab60fd1b892c1a51e21d0 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 2 Dec 2022 18:14:58 +0000 Subject: [PATCH 1/4] Download device keys for self prior to verification checks Fixes https://github.com/vector-im/element-android/issues/7676 --- .../org/matrix/android/sdk/api/rendezvous/Rendezvous.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt index f724ac4b62..d421f8f994 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt @@ -35,7 +35,10 @@ import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_S import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME import org.matrix.android.sdk.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME import org.matrix.android.sdk.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME +import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo +import org.matrix.android.sdk.api.session.crypto.model.MXUsersDevicesMap import org.matrix.android.sdk.api.util.MatrixJsonParser +import org.matrix.android.sdk.api.util.awaitCallback import timber.log.Timber /** @@ -147,6 +150,9 @@ class Rendezvous( val deviceKey = crypto.getMyDevice().fingerprint() send(Payload(PayloadType.PROGRESS, outcome = Outcome.SUCCESS, deviceId = deviceId, deviceKey = deviceKey)) + // explicitly download keys for ourself rather than wait for initial sync to complete + awaitCallback> { crypto.downloadKeys(listOf(userId), false, it) } + // await confirmation of verification val verificationResponse = receive() if (verificationResponse?.outcome == Outcome.VERIFIED) { From d0b2c0693de63ff69195c6bb3fac756725e8ac02 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 2 Dec 2022 18:19:02 +0000 Subject: [PATCH 2/4] Changelog --- changelog.d/7699.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/7699.bugfix diff --git a/changelog.d/7699.bugfix b/changelog.d/7699.bugfix new file mode 100644 index 0000000000..30a4b8e9fa --- /dev/null +++ b/changelog.d/7699.bugfix @@ -0,0 +1 @@ +Fix E2EE set up failure whilst signing in using QR code From 3a2a916c2f17609fdfba82df08f3160e2685ec68 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Tue, 6 Dec 2022 11:34:25 +0000 Subject: [PATCH 3/4] Clarify comment --- .../java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt index d421f8f994..3364e900c6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt @@ -150,7 +150,7 @@ class Rendezvous( val deviceKey = crypto.getMyDevice().fingerprint() send(Payload(PayloadType.PROGRESS, outcome = Outcome.SUCCESS, deviceId = deviceId, deviceKey = deviceKey)) - // explicitly download keys for ourself rather than wait for initial sync to complete + // explicitly download keys for ourself rather than racing with initial sync which might not complete in time awaitCallback> { crypto.downloadKeys(listOf(userId), false, it) } // await confirmation of verification From 7bbd91f2a93adcd9ec73aea618912dda17876236 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 7 Dec 2022 15:09:43 +0000 Subject: [PATCH 4/4] Handle error whilst download key for self --- .../org/matrix/android/sdk/api/rendezvous/Rendezvous.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt index 3364e900c6..e5b2d6bf12 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/rendezvous/Rendezvous.kt @@ -150,8 +150,13 @@ class Rendezvous( val deviceKey = crypto.getMyDevice().fingerprint() send(Payload(PayloadType.PROGRESS, outcome = Outcome.SUCCESS, deviceId = deviceId, deviceKey = deviceKey)) - // explicitly download keys for ourself rather than racing with initial sync which might not complete in time - awaitCallback> { crypto.downloadKeys(listOf(userId), false, it) } + try { + // explicitly download keys for ourself rather than racing with initial sync which might not complete in time + awaitCallback> { crypto.downloadKeys(listOf(userId), false, it) } + } catch (e: Throwable) { + // log as warning and continue as initial sync might still complete + Timber.tag(TAG).w(e, "Failed to download keys for self") + } // await confirmation of verification val verificationResponse = receive()