mirror of
https://github.com/element-hq/element-android
synced 2024-12-19 15:58:27 +03:00
crypto: Back up room keys when we create or receive new ones
This commit is contained in:
parent
f9476f12af
commit
5c7b248ed2
2 changed files with 15 additions and 3 deletions
|
@ -379,7 +379,6 @@ internal class DefaultCryptoService @Inject constructor(
|
|||
private val setDeviceNameTask: SetDeviceNameTask,
|
||||
private val loadRoomMembersTask: LoadRoomMembersTask,
|
||||
private val cryptoSessionInfoProvider: CryptoSessionInfoProvider,
|
||||
private val createKeysBackupVersionTask: CreateKeysBackupVersionTask,
|
||||
private val coroutineDispatchers: MatrixCoroutineDispatchers,
|
||||
private val taskExecutor: TaskExecutor,
|
||||
private val cryptoCoroutineScope: CoroutineScope,
|
||||
|
@ -662,6 +661,8 @@ internal class DefaultCryptoService @Inject constructor(
|
|||
// keys claim request to be sent out.
|
||||
// This could be omitted but then devices might be waiting for the next
|
||||
sendOutgoingRequests()
|
||||
|
||||
keysBackupService?.maybeBackupKeys()
|
||||
}
|
||||
|
||||
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
|
||||
|
@ -996,12 +997,14 @@ internal class DefaultCryptoService @Inject constructor(
|
|||
}
|
||||
|
||||
val keyShareLock = roomKeyShareLocks.getOrPut(roomId, { Mutex() })
|
||||
var sharedKey = false
|
||||
|
||||
keyShareLock.withLock {
|
||||
coroutineScope {
|
||||
this@DefaultCryptoService.olmMachine!!.shareRoomKey(roomId, roomMembers).map {
|
||||
when (it) {
|
||||
is Request.ToDevice -> {
|
||||
sharedKey = true
|
||||
async {
|
||||
sendToDevice(it)
|
||||
}
|
||||
|
@ -1016,6 +1019,12 @@ internal class DefaultCryptoService @Inject constructor(
|
|||
}.joinAll()
|
||||
}
|
||||
}
|
||||
|
||||
// If we sent out a room key over to-device messages it's likely that we created a new one
|
||||
// Try to back the key up
|
||||
if (sharedKey) {
|
||||
keysBackupService?.maybeBackupKeys()
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun encrypt(roomId: String, eventType: String, content: Content): Content {
|
||||
|
@ -1120,7 +1129,10 @@ internal class DefaultCryptoService @Inject constructor(
|
|||
override suspend fun importRoomKeys(roomKeysAsArray: ByteArray,
|
||||
password: String,
|
||||
progressListener: ProgressListener?): ImportRoomKeysResult {
|
||||
return olmMachine!!.importKeys(roomKeysAsArray, password, progressListener)
|
||||
val result = olmMachine!!.importKeys(roomKeysAsArray, password, progressListener)
|
||||
keysBackupService?.maybeBackupKeys()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -779,7 +779,7 @@ internal class RustKeyBackupService @Inject constructor(
|
|||
/**
|
||||
* Do a backup if there are new keys, with a delay
|
||||
*/
|
||||
private fun maybeBackupKeys() {
|
||||
fun maybeBackupKeys() {
|
||||
when {
|
||||
isStucked -> {
|
||||
// If not already done, or in error case, check for a valid backup version on the homeserver.
|
||||
|
|
Loading…
Reference in a new issue