From 819b3a8a269033aa035572225f5b396a7f6b8405 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Mon, 28 Aug 2023 15:03:29 +0300
Subject: [PATCH] Random key backup for bsspeke

---
 .../api/session/crypto/keysbackup/KeysBackupService.kt |  3 +--
 .../securestorage/SharedSecretStorageService.kt        |  5 ++---
 .../crypto/keysbackup/DefaultKeysBackupService.kt      | 10 ++++++----
 .../secrets/DefaultSharedSecretStorageService.kt       |  5 ++---
 4 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt
index a0a4bf00..bc8dd341 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt
@@ -129,8 +129,7 @@ interface KeysBackupService {
     )
 
 
-    fun prepareBsSpekeKeysBackupVersion(hashedKey:ByteArray,
-                                 callback: MatrixCallback<MegolmBackupCreationInfo>)
+    fun prepareRandomKeyBackupVersion(callback: MatrixCallback<MegolmBackupCreationInfo>)
     /**
      * Delete a keys backup version. It will delete all backed up keys on the server, and the backup itself.
      * If we are backing up to this version. Backup will be stopped.
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt
index d48a72b5..8a7ebd1f 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt
@@ -145,10 +145,9 @@ interface SharedSecretStorageService {
             userName: String
     ): SsssKeyCreationInfo
 
-    suspend fun generateBsSpekeWithPassphrase(
+    suspend fun generateBsSpekeKeyInfo(
             keyId: String,
             privateKey: ByteArray,
-            keySigner: KeySigner,
-            progressListener: ProgressListener?
+            keySigner: KeySigner
     ): SsssKeyCreationInfo
 }
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 a41c9fd3..a8cb58a9 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
@@ -94,6 +94,7 @@ import org.matrix.olm.OlmPkEncryption
 import org.matrix.olm.OlmPkMessage
 import timber.log.Timber
 import java.security.InvalidParameterException
+import java.security.SecureRandom
 import javax.inject.Inject
 import kotlin.random.Random
 
@@ -236,13 +237,14 @@ internal class DefaultKeysBackupService @Inject constructor(
         }
     }
 
-    override fun prepareBsSpekeKeysBackupVersion(hashedKey: ByteArray,
-                                                 callback: MatrixCallback<MegolmBackupCreationInfo>) {
+    override fun prepareRandomKeyBackupVersion(callback: MatrixCallback<MegolmBackupCreationInfo>) {
         cryptoCoroutineScope.launch(coroutineDispatchers.io) {
             try {
+                val privateKey = ByteArray(32)
+                SecureRandom().nextBytes(privateKey)
                 val olmPkDecryption = OlmPkDecryption()
                 val signalableBackupAuthData = SignalableMegolmBackupAuthData(
-                        publicKey = olmPkDecryption.setPrivateKey(hashedKey),
+                        publicKey = olmPkDecryption.setPrivateKey(privateKey),
                         privateKeySalt = null,
                         privateKeyIterations = null
                 )
@@ -272,7 +274,7 @@ internal class DefaultKeysBackupService @Inject constructor(
                         signatures = signatures
                 )
                 val creationInfo = MegolmBackupCreationInfo(
-                        algorithm = BSSPEKE_ALGORITHM_BACKUP,
+                        algorithm = MXCRYPTO_ALGORITHM_MEGOLM_BACKUP,
                         authData = signedBackupAuthData,
                         recoveryKey = computeRecoveryKey(olmPkDecryption.privateKey())
                 )
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt
index b886751b..587e0f41 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt
@@ -427,11 +427,10 @@ internal class DefaultSharedSecretStorageService @Inject constructor(
         }
     }
 
-    override suspend fun generateBsSpekeWithPassphrase(
+    override suspend fun generateBsSpekeKeyInfo(
             keyId: String,
             privateKey: ByteArray,
-            keySigner: KeySigner,
-            progressListener: ProgressListener?
+            keySigner: KeySigner
     ): SsssKeyCreationInfo {
         return withContext(cryptoCoroutineScope.coroutineContext + coroutineDispatchers.computation) {
             val storageKeyContent = SecretStorageKeyContent(
-- 
GitLab