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