From b61b2b6f16e077315200ae09578366c65fbebfcd Mon Sep 17 00:00:00 2001 From: Valere Date: Mon, 13 Nov 2023 22:23:11 +0100 Subject: [PATCH 1/4] bump crypto sdk to 0.3.16 --- matrix-sdk-android/build.gradle | 2 +- .../sdk/api/session/crypto/CryptoService.kt | 3 ++- .../android/sdk/internal/crypto/OlmMachine.kt | 22 +++++++++---------- .../sdk/internal/crypto/RustCryptoService.kt | 3 ++- .../session/sync/SyncResponseHandler.kt | 3 ++- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index e0dae499bb..cab81b0283 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -215,7 +215,7 @@ dependencies { implementation libs.google.phonenumber - implementation("org.matrix.rustcomponents:crypto-android:0.3.15") + implementation("org.matrix.rustcomponents:crypto-android:0.3.16") // api project(":library:rustCrypto") testImplementation libs.tests.junit diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt index 31d11f6730..3ed6dd1450 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt @@ -240,7 +240,8 @@ interface CryptoService { toDevice: ToDeviceSyncResponse?, deviceChanges: DeviceListResponse?, keyCounts: DeviceOneTimeKeysCountSyncResponse?, - deviceUnusedFallbackKeyTypes: List?) + deviceUnusedFallbackKeyTypes: List?, + nextBatch: String?) suspend fun onLiveEvent(roomId: String, event: Event, isInitialSync: Boolean, cryptoStoreAggregator: CryptoStoreAggregator?) suspend fun onStateEvent(roomId: String, event: Event, cryptoStoreAggregator: CryptoStoreAggregator?) {} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt index 998c6ef753..225852a094 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt @@ -19,7 +19,6 @@ package org.matrix.android.sdk.internal.crypto import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData import com.squareup.moshi.Moshi -import com.squareup.moshi.Types import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.runBlocking @@ -262,6 +261,7 @@ internal class OlmMachine @Inject constructor( deviceChanges: DeviceListResponse?, keyCounts: DeviceOneTimeKeysCountSyncResponse?, deviceUnusedFallbackKeyTypes: List?, + nextBatch: String? ): ToDeviceSyncResponse { val response = withContext(coroutineDispatchers.io) { val counts: MutableMap = mutableMapOf() @@ -281,18 +281,16 @@ internal class OlmMachine @Inject constructor( val events = adapter.toJson(toDevice ?: ToDeviceSyncResponse()) // field pass in the list of unused fallback keys here - val receiveSyncChanges = inner.receiveSyncChanges(events, devices, counts, deviceUnusedFallbackKeyTypes) + val receiveSyncChanges = inner.receiveSyncChanges(events, devices, counts, deviceUnusedFallbackKeyTypes, nextBatch ?: "") - val outAdapter = moshi.adapter>( - Types.newParameterizedType( - List::class.java, - Event::class.java, - String::class.java, - Integer::class.java, - Any::class.java, - ) - ) - outAdapter.fromJson(receiveSyncChanges) ?: emptyList() + val outAdapter = moshi.adapter(Event::class.java) + + // we don't need to use `roomKeyInfos` as we are for now we are + // checking the returned to devices to check for room keys. + // XXX Anyhow there is now proper signaling we should soon stop parsing them manually + receiveSyncChanges.toDeviceEvents.map { + outAdapter.fromJson(it) ?: Event() + } } // We may get cross signing keys over a to-device event, update our listeners. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt index 558b186cdd..44fd9e6797 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt @@ -618,9 +618,10 @@ internal class RustCryptoService @Inject constructor( deviceChanges: DeviceListResponse?, keyCounts: DeviceOneTimeKeysCountSyncResponse?, deviceUnusedFallbackKeyTypes: List?, + nextBatch: String?, ) { // Decrypt and handle our to-device events - val toDeviceEvents = this.olmMachine.receiveSyncChanges(toDevice, deviceChanges, keyCounts, deviceUnusedFallbackKeyTypes) + val toDeviceEvents = this.olmMachine.receiveSyncChanges(toDevice, deviceChanges, keyCounts, deviceUnusedFallbackKeyTypes, nextBatch) // Notify the our listeners about room keys so decryption is retried. toDeviceEvents.events.orEmpty().forEach { event -> diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index 3d0c816cb0..8331786072 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -184,7 +184,8 @@ internal class SyncResponseHandler @Inject constructor( syncResponse.toDevice, syncResponse.deviceLists, syncResponse.deviceOneTimeKeysCount, - syncResponse.deviceUnusedFallbackKeyTypes + syncResponse.deviceUnusedFallbackKeyTypes, + syncResponse.nextBatch ) }.also { Timber.v("Finish handling toDevice in $it ms") From f37d918ce6dd08fc6dbaac1a54f93e29c59323d3 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 14 Nov 2023 11:24:05 +0100 Subject: [PATCH 2/4] fix outdated documentation --- .../java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt index 225852a094..639c8f55d2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt @@ -253,6 +253,8 @@ internal class OlmMachine @Inject constructor( * * @param deviceUnusedFallbackKeyTypes The key algorithms for which the server has an unused fallback key for the device. * + * @param nextBatch The batch token to pass in the next sync request. + * * @return The handled events, decrypted if needed (secrets are zeroised). */ @Throws(CryptoStoreException::class) From 36ce42e36ef3e4470c48b9fef963936d9b96dbae Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 14 Nov 2023 11:33:26 +0100 Subject: [PATCH 3/4] update change log --- changelog.d/8679.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/8679.misc diff --git a/changelog.d/8679.misc b/changelog.d/8679.misc new file mode 100644 index 0000000000..d913671219 --- /dev/null +++ b/changelog.d/8679.misc @@ -0,0 +1 @@ +Bump crypto sdk bindings to v0.3.16 From d3391076b52020e1c24dc17e76dc6c526da8a3d4 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 14 Nov 2023 12:09:05 +0100 Subject: [PATCH 4/4] fix comment --- .../java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt index 639c8f55d2..f90ae4a345 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OlmMachine.kt @@ -287,7 +287,7 @@ internal class OlmMachine @Inject constructor( val outAdapter = moshi.adapter(Event::class.java) - // we don't need to use `roomKeyInfos` as we are for now we are + // we don't need to use `roomKeyInfos` as for now we are manually // checking the returned to devices to check for room keys. // XXX Anyhow there is now proper signaling we should soon stop parsing them manually receiveSyncChanges.toDeviceEvents.map {