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 a0a4bf004205af0344528684057bf91b2fc63f22..bc8dd341e1fa5dff7ab3684bdbec1b344befd118 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 d48a72b594a6709c57c2cd084f1ccc80b9a5158e..8a7ebd1fb7389014c14be1ce3237a91636eb23a8 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 a41c9fd3421efb5e1b965c4b2ecf04a96476f40c..a8cb58a905146ca1a1612e73b4a6da51db136ff7 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 b886751b6c3b84854f02ba3bb43cdd3717dc0619..587e0f41efe46218434319b539436741f41a9377 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(