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 08c621910db33415c76dac2cba170be499bb48e1..86ed2a931abe13f29e7c96a45d98c5cd32e7be7c 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 7db8d74ad4c86d2ad78043f93ea0fb125775b03c..a7827c83dcbf8f81e9f27152aabb9bc4e58c3573 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 788d1704b8aed0720f103a163f5f342ebd40c117..6b15fe1224a5362e7f39cdbbe60d0ce5d28a3469 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() } }