diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt
index 4dabc4d7352551a8e59dd55dfb54d5e62021fcd0..329bed3e276827ae90f1a6137ecb1d8d1de10cd2 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt
@@ -1182,6 +1182,28 @@ internal class DefaultKeysBackupService @Inject constructor(
         return computeRecoveryKey(data)
     }
 
+    @WorkerThread
+    private fun recoveryBcryptKeyFromPassword(password: String, keysBackupData: KeysVersionResult): String? {
+        val authData = getMegolmBackupAuthData(keysBackupData)
+
+        if (authData == null) {
+            Timber.w("recoveryKeyFromPassword: invalid parameter")
+            return null
+        }
+
+        if (authData.privateKeySalt.isNullOrBlank() ||
+            authData.privateKeyIterations == null) {
+            Timber.w("recoveryKeyFromPassword: Salt and/or iterations not found in key backup auth data")
+
+            return null
+        }
+
+        // Extract the recovery key from the passphrase
+        val data = BCryptManager.retrievePrivateKeyWithPassword(password, authData.privateKeySalt, authData.privateKeyIterations)
+
+        return data.toString()
+    }
+
     /**
      * Check if a recovery key matches key backup authentication data.
      *