Add entry to keyBackupService to expose deriveKey
, which becomes internal
And format code
This commit is contained in:
parent
1402416338
commit
3735ac307f
@ -214,4 +214,9 @@ interface KeysBackupService {
|
|||||||
fun getKeyBackupRecoveryKeyInfo(): SavedKeyBackupKeyInfo?
|
fun getKeyBackupRecoveryKeyInfo(): SavedKeyBackupKeyInfo?
|
||||||
|
|
||||||
fun isValidRecoveryKeyForCurrentVersion(recoveryKey: String, callback: MatrixCallback<Boolean>)
|
fun isValidRecoveryKeyForCurrentVersion(recoveryKey: String, callback: MatrixCallback<Boolean>)
|
||||||
|
|
||||||
|
fun computePrivateKey(passphrase: String,
|
||||||
|
privateKeySalt: String,
|
||||||
|
privateKeyIterations: Int,
|
||||||
|
progressListener: ProgressListener): ByteArray
|
||||||
}
|
}
|
||||||
|
@ -36,9 +36,15 @@ import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupLastVersio
|
|||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
|
||||||
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupVersionTrust
|
||||||
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysVersion
|
||||||
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysVersionResult
|
||||||
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.MegolmBackupCreationInfo
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.SavedKeyBackupKeyInfo
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.SavedKeyBackupKeyInfo
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.computeRecoveryKey
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.computeRecoveryKey
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.extractCurveKeyFromRecoveryKey
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.extractCurveKeyFromRecoveryKey
|
||||||
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.toKeysVersionResult
|
||||||
|
import org.matrix.android.sdk.api.session.crypto.model.ImportRoomKeysResult
|
||||||
import org.matrix.android.sdk.api.util.awaitCallback
|
import org.matrix.android.sdk.api.util.awaitCallback
|
||||||
import org.matrix.android.sdk.api.util.fromBase64
|
import org.matrix.android.sdk.api.util.fromBase64
|
||||||
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
|
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
|
||||||
@ -46,18 +52,13 @@ import org.matrix.android.sdk.internal.crypto.MXOlmDevice
|
|||||||
import org.matrix.android.sdk.internal.crypto.MegolmSessionData
|
import org.matrix.android.sdk.internal.crypto.MegolmSessionData
|
||||||
import org.matrix.android.sdk.internal.crypto.ObjectSigner
|
import org.matrix.android.sdk.internal.crypto.ObjectSigner
|
||||||
import org.matrix.android.sdk.internal.crypto.actions.MegolmSessionDataImporter
|
import org.matrix.android.sdk.internal.crypto.actions.MegolmSessionDataImporter
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupVersionTrust
|
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.KeysBackupVersionTrustSignature
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.KeysBackupVersionTrustSignature
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupAuthData
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupAuthData
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.MegolmBackupCreationInfo
|
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.SignalableMegolmBackupAuthData
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.SignalableMegolmBackupAuthData
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.BackupKeysResult
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.BackupKeysResult
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.CreateKeysBackupVersionBody
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.CreateKeysBackupVersionBody
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeyBackupData
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeyBackupData
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysBackupData
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysBackupData
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysVersion
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysVersionResult
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.toKeysVersionResult
|
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.RoomKeysBackupData
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.RoomKeysBackupData
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.UpdateKeysBackupVersionBody
|
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.UpdateKeysBackupVersionBody
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.CreateKeysBackupVersionTask
|
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.CreateKeysBackupVersionTask
|
||||||
@ -74,7 +75,6 @@ import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.StoreRoomSessionD
|
|||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.StoreRoomSessionsDataTask
|
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.StoreRoomSessionsDataTask
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.StoreSessionsDataTask
|
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.StoreSessionsDataTask
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.UpdateKeysBackupVersionTask
|
import org.matrix.android.sdk.internal.crypto.keysbackup.tasks.UpdateKeysBackupVersionTask
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.ImportRoomKeysResult
|
|
||||||
import org.matrix.android.sdk.internal.crypto.model.OlmInboundGroupSessionWrapper2
|
import org.matrix.android.sdk.internal.crypto.model.OlmInboundGroupSessionWrapper2
|
||||||
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
|
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
|
||||||
import org.matrix.android.sdk.internal.crypto.store.db.model.KeysBackupDataEntity
|
import org.matrix.android.sdk.internal.crypto.store.db.model.KeysBackupDataEntity
|
||||||
@ -1099,6 +1099,13 @@ internal class DefaultKeysBackupService @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun computePrivateKey(passphrase: String,
|
||||||
|
privateKeySalt: String,
|
||||||
|
privateKeyIterations: Int,
|
||||||
|
progressListener: ProgressListener): ByteArray {
|
||||||
|
return deriveKey(passphrase, privateKeySalt, privateKeyIterations, progressListener)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable backing up of keys.
|
* Enable backing up of keys.
|
||||||
* This method will update the state and will start sending keys in nominal case
|
* This method will update the state and will start sending keys in nominal case
|
||||||
|
@ -30,13 +30,14 @@ import kotlin.experimental.xor
|
|||||||
private const val SALT_LENGTH = 32
|
private const val SALT_LENGTH = 32
|
||||||
private const val DEFAULT_ITERATION = 500_000
|
private const val DEFAULT_ITERATION = 500_000
|
||||||
|
|
||||||
data class GeneratePrivateKeyResult(
|
internal data class GeneratePrivateKeyResult(
|
||||||
// The private key
|
// The private key
|
||||||
val privateKey: ByteArray,
|
val privateKey: ByteArray,
|
||||||
// the salt used to generate the private key
|
// the salt used to generate the private key
|
||||||
val salt: String,
|
val salt: String,
|
||||||
// number of key derivations done on the generated private key.
|
// number of key derivations done on the generated private key.
|
||||||
val iterations: Int)
|
val iterations: Int
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute a private key from a password.
|
* Compute a private key from a password.
|
||||||
@ -46,7 +47,9 @@ data class GeneratePrivateKeyResult(
|
|||||||
* @return a {privateKey, salt, iterations} tuple.
|
* @return a {privateKey, salt, iterations} tuple.
|
||||||
*/
|
*/
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
fun generatePrivateKeyWithPassword(password: String, progressListener: ProgressListener?): GeneratePrivateKeyResult {
|
internal fun generatePrivateKeyWithPassword(password: String,
|
||||||
|
progressListener: ProgressListener?
|
||||||
|
): GeneratePrivateKeyResult {
|
||||||
val salt = generateSalt()
|
val salt = generateSalt()
|
||||||
val iterations = DEFAULT_ITERATION
|
val iterations = DEFAULT_ITERATION
|
||||||
val privateKey = deriveKey(password, salt, iterations, progressListener)
|
val privateKey = deriveKey(password, salt, iterations, progressListener)
|
||||||
@ -65,7 +68,7 @@ fun generatePrivateKeyWithPassword(password: String, progressListener: ProgressL
|
|||||||
* @return a private key.
|
* @return a private key.
|
||||||
*/
|
*/
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
fun retrievePrivateKeyWithPassword(password: String,
|
internal fun retrievePrivateKeyWithPassword(password: String,
|
||||||
salt: String,
|
salt: String,
|
||||||
iterations: Int,
|
iterations: Int,
|
||||||
progressListener: ProgressListener? = null): ByteArray {
|
progressListener: ProgressListener? = null): ByteArray {
|
||||||
@ -83,7 +86,7 @@ fun retrievePrivateKeyWithPassword(password: String,
|
|||||||
* @return a private key.
|
* @return a private key.
|
||||||
*/
|
*/
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
fun deriveKey(password: String,
|
internal fun deriveKey(password: String,
|
||||||
salt: String,
|
salt: String,
|
||||||
iterations: Int,
|
iterations: Int,
|
||||||
progressListener: ProgressListener?): ByteArray {
|
progressListener: ProgressListener?): ByteArray {
|
||||||
|
@ -32,7 +32,6 @@ import org.matrix.android.sdk.api.session.securestorage.SharedSecretStorageServi
|
|||||||
import org.matrix.android.sdk.api.session.securestorage.SsssKeyCreationInfo
|
import org.matrix.android.sdk.api.session.securestorage.SsssKeyCreationInfo
|
||||||
import org.matrix.android.sdk.api.util.awaitCallback
|
import org.matrix.android.sdk.api.util.awaitCallback
|
||||||
import org.matrix.android.sdk.api.util.toBase64NoPadding
|
import org.matrix.android.sdk.api.util.toBase64NoPadding
|
||||||
import org.matrix.android.sdk.internal.crypto.keysbackup.deriveKey
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -72,7 +71,11 @@ class BackupToQuadSMigrationTask @Inject constructor(
|
|||||||
extractCurveKeyFromRecoveryKey(params.recoveryKey)
|
extractCurveKeyFromRecoveryKey(params.recoveryKey)
|
||||||
} else if (!params.passphrase.isNullOrEmpty() && version.getAuthDataAsMegolmBackupAuthData()?.privateKeySalt != null) {
|
} else if (!params.passphrase.isNullOrEmpty() && version.getAuthDataAsMegolmBackupAuthData()?.privateKeySalt != null) {
|
||||||
version.getAuthDataAsMegolmBackupAuthData()?.let { authData ->
|
version.getAuthDataAsMegolmBackupAuthData()?.let { authData ->
|
||||||
deriveKey(params.passphrase, authData.privateKeySalt!!, authData.privateKeyIterations!!, object : ProgressListener {
|
keysBackupService.computePrivateKey(
|
||||||
|
params.passphrase,
|
||||||
|
authData.privateKeySalt!!,
|
||||||
|
authData.privateKeyIterations!!,
|
||||||
|
object : ProgressListener {
|
||||||
override fun onProgress(progress: Int, total: Int) {
|
override fun onProgress(progress: Int, total: Int) {
|
||||||
params.progressListener?.onProgress(WaitingViewData(
|
params.progressListener?.onProgress(WaitingViewData(
|
||||||
stringProvider.getString(R.string.bootstrap_progress_checking_backup_with_info,
|
stringProvider.getString(R.string.bootstrap_progress_checking_backup_with_info,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user