using passed base64 instance, fixes android 26 requirement for imports
This commit is contained in:
parent
ded1d9b5da
commit
7ea01dd292
|
@ -219,7 +219,8 @@ internal class MatrixModules(
|
|||
installAuthService(credentialsStore)
|
||||
installEncryptionService(store.knownDevicesStore())
|
||||
|
||||
val olmAccountStore = OlmPersistenceWrapper(store.olmStore(), AndroidBase64())
|
||||
val base64 = AndroidBase64()
|
||||
val olmAccountStore = OlmPersistenceWrapper(store.olmStore(), base64)
|
||||
val singletonFlows = SingletonFlows(coroutineDispatchers)
|
||||
val olm = OlmWrapper(
|
||||
olmStore = olmAccountStore,
|
||||
|
@ -239,6 +240,7 @@ internal class MatrixModules(
|
|||
services.roomService().joinedMembers(it).map { it.userId }
|
||||
}
|
||||
},
|
||||
base64 = base64,
|
||||
coroutineDispatchers = coroutineDispatchers,
|
||||
)
|
||||
installMessageService(store.localEchoStore, BackgroundWorkAdapter(workModule.workScheduler())) { serviceProvider ->
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package app.dapk.st.matrix.crypto
|
||||
|
||||
import app.dapk.st.core.Base64
|
||||
import app.dapk.st.core.CoroutineDispatchers
|
||||
import app.dapk.st.matrix.MatrixService
|
||||
import app.dapk.st.matrix.MatrixServiceInstaller
|
||||
|
@ -118,6 +119,7 @@ fun MatrixServiceInstaller.installCryptoService(
|
|||
credentialsStore: CredentialsStore,
|
||||
olm: Olm,
|
||||
roomMembersProvider: ServiceDepFactory<RoomMembersProvider>,
|
||||
base64: Base64,
|
||||
coroutineDispatchers: CoroutineDispatchers,
|
||||
) {
|
||||
this.install { (_, _, services, logger) ->
|
||||
|
@ -148,7 +150,7 @@ fun MatrixServiceInstaller.installCryptoService(
|
|||
logger
|
||||
)
|
||||
val verificationHandler = VerificationHandler(deviceService, credentialsStore, logger, JsonCanonicalizer(), olm)
|
||||
val roomKeyImporter = RoomKeyImporter(coroutineDispatchers)
|
||||
val roomKeyImporter = RoomKeyImporter(base64, coroutineDispatchers)
|
||||
SERVICE_KEY to DefaultCryptoService(olmCrypto, verificationHandler, roomKeyImporter, logger)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package app.dapk.st.matrix.crypto.internal
|
||||
|
||||
import app.dapk.st.core.Base64
|
||||
import app.dapk.st.core.CoroutineDispatchers
|
||||
import app.dapk.st.core.withIoContext
|
||||
import app.dapk.st.matrix.common.AlgorithmName
|
||||
|
@ -12,7 +13,6 @@ import kotlinx.serialization.json.Json
|
|||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.nio.charset.Charset
|
||||
import java.util.*
|
||||
import javax.crypto.Cipher
|
||||
import javax.crypto.Mac
|
||||
import javax.crypto.spec.IvParameterSpec
|
||||
|
@ -23,11 +23,13 @@ private const val HEADER_LINE = "-----BEGIN MEGOLM SESSION DATA-----"
|
|||
private const val TRAILER_LINE = "-----END MEGOLM SESSION DATA-----"
|
||||
private val importJson = Json { ignoreUnknownKeys = true }
|
||||
|
||||
class RoomKeyImporter(private val dispatchers: CoroutineDispatchers) {
|
||||
class RoomKeyImporter(
|
||||
private val base64: Base64,
|
||||
private val dispatchers: CoroutineDispatchers,
|
||||
) {
|
||||
|
||||
suspend fun InputStream.importRoomKeys(password: String, onChunk: suspend (List<SharedRoomKey>) -> Unit): List<RoomId> {
|
||||
return dispatchers.withIoContext {
|
||||
val decoder = Base64.getDecoder()
|
||||
val decryptCipher = Cipher.getInstance("AES/CTR/NoPadding")
|
||||
var jsonSegment = ""
|
||||
|
||||
|
@ -61,7 +63,7 @@ class RoomKeyImporter(private val dispatchers: CoroutineDispatchers) {
|
|||
.withIndex()
|
||||
.map { (index, it) ->
|
||||
val line = it.joinToString(separator = "").replace("\n", "")
|
||||
val toByteArray = decoder.decode(line)
|
||||
val toByteArray = base64.decode(line)
|
||||
if (index == 0) {
|
||||
decryptCipher.initialize(toByteArray, password)
|
||||
toByteArray.copyOfRange(37, toByteArray.size).decrypt(decryptCipher).also {
|
||||
|
|
|
@ -82,7 +82,8 @@ class TestMatrix(
|
|||
installAuthService(storeModule.credentialsStore(), AuthConfig(forceHttp = false))
|
||||
installEncryptionService(storeModule.knownDevicesStore())
|
||||
|
||||
val olmAccountStore = OlmPersistenceWrapper(storeModule.olmStore(), JavaBase64())
|
||||
val base64 = JavaBase64()
|
||||
val olmAccountStore = OlmPersistenceWrapper(storeModule.olmStore(), base64)
|
||||
val olm = OlmWrapper(
|
||||
olmStore = olmAccountStore,
|
||||
singletonFlows = SingletonFlows(coroutineDispatchers),
|
||||
|
@ -101,6 +102,7 @@ class TestMatrix(
|
|||
services.roomService().joinedMembers(it).map { it.userId }
|
||||
}
|
||||
},
|
||||
base64 = base64,
|
||||
coroutineDispatchers = coroutineDispatchers,
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue