From c294035efd415fb75f925270dbc4cee898cf37cd Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Mon, 4 Dec 2023 17:06:16 +0200 Subject: [PATCH] Fix key backup algo check --- .../crypto/keysbackup/DefaultKeyBackupService.kt | 9 ++++++++- .../keysbackup/model/rest/KeysAlgorithmAndData.kt | 8 +++++++- .../crypto/keysbackup/RustKeyBackupService.kt | 13 +++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeyBackupService.kt b/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeyBackupService.kt index 08c62191..86ed2a93 100644 --- a/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeyBackupService.kt +++ b/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeyBackupService.kt @@ -29,6 +29,8 @@ import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.api.MatrixCoroutineDispatchers import org.matrix.android.sdk.api.auth.data.Credentials +import org.matrix.android.sdk.api.crypto.BCRYPT_ALGORITHM_BACKUP +import org.matrix.android.sdk.api.crypto.BSSPEKE_ALGORITHM_BACKUP import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.failure.MatrixError @@ -966,7 +968,12 @@ internal class DefaultKeysBackupService @Inject constructor( */ private fun getMegolmBackupAuthData(keysBackupData: KeysVersionResult): MegolmBackupAuthData? { return keysBackupData - .takeIf { it.version.isNotEmpty() && it.algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP } + .takeIf { + it.version.isNotEmpty() && + (it.algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP + || it.algorithm == BCRYPT_ALGORITHM_BACKUP + || it.algorithm == BSSPEKE_ALGORITHM_BACKUP) + } ?.getAuthDataAsMegolmBackupAuthData() ?.takeIf { it.publicKey.isNotEmpty() } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt index 7db8d74a..a7827c83 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt @@ -16,6 +16,8 @@ package org.matrix.android.sdk.internal.crypto.keysbackup.model.rest +import org.matrix.android.sdk.api.crypto.BCRYPT_ALGORITHM_BACKUP +import org.matrix.android.sdk.api.crypto.BSSPEKE_ALGORITHM_BACKUP import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP import org.matrix.android.sdk.api.session.crypto.keysbackup.MegolmBackupAuthData import org.matrix.android.sdk.api.util.JsonDict @@ -56,7 +58,11 @@ internal interface KeysAlgorithmAndData { //Changed for Circles fun getAuthDataAsMegolmBackupAuthData(): MegolmBackupAuthData? { return MoshiProvider.providesMoshi() - .takeIf { algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP } + .takeIf { + algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP + || algorithm == BCRYPT_ALGORITHM_BACKUP + || algorithm == BSSPEKE_ALGORITHM_BACKUP + } ?.adapter(MegolmBackupAuthData::class.java) ?.fromJsonValue(authData) } diff --git a/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/RustKeyBackupService.kt b/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/RustKeyBackupService.kt index 788d1704..6b15fe12 100644 --- a/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/RustKeyBackupService.kt +++ b/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/keysbackup/RustKeyBackupService.kt @@ -28,9 +28,10 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.api.MatrixCoroutineDispatchers +import org.matrix.android.sdk.api.crypto.BCRYPT_ALGORITHM_BACKUP +import org.matrix.android.sdk.api.crypto.BSSPEKE_ALGORITHM_BACKUP import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.failure.Failure @@ -68,7 +69,6 @@ import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.session.SessionScope import org.matrix.android.sdk.internal.util.JsonCanonicalizer import org.matrix.olm.OlmException -import org.matrix.olm.OlmPkDecryption import org.matrix.rustcomponents.sdk.crypto.Request import org.matrix.rustcomponents.sdk.crypto.RequestType import org.matrix.rustcomponents.sdk.crypto.SignatureState @@ -161,7 +161,7 @@ internal class RustKeyBackupService @Inject constructor( } } - override suspend fun prepareKeysBackupVersion(key: ByteArray, progressListener: ProgressListener?):MegolmBackupCreationInfo { + override suspend fun prepareKeysBackupVersion(key: ByteArray, progressListener: ProgressListener?): MegolmBackupCreationInfo { return withContext(coroutineDispatchers.computation) { val recoveryKey = BackupRecoveryKey.fromBase64(key.toBase64NoPadding()) val publicKey = recoveryKey.megolmV1PublicKey() @@ -850,7 +850,12 @@ internal class RustKeyBackupService @Inject constructor( */ private fun getMegolmBackupAuthData(keysBackupData: KeysVersionResult): MegolmBackupAuthData? { return keysBackupData - .takeIf { it.version.isNotEmpty() && it.algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP } + .takeIf { + it.version.isNotEmpty() && + (it.algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP + || it.algorithm == BCRYPT_ALGORITHM_BACKUP + || it.algorithm == BSSPEKE_ALGORITHM_BACKUP) + } ?.getAuthDataAsMegolmBackupAuthData() ?.takeIf { it.publicKey.isNotEmpty() } } -- GitLab