do not add tracing ids to verification events
This commit is contained in:
parent
139eb1708c
commit
8646cc441d
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.session.events.model
|
package org.matrix.android.sdk.api.session.events.model
|
||||||
|
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.message.MessageType.MSGTYPE_VERIFICATION_REQUEST
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants defining known event types from Matrix specifications.
|
* Constants defining known event types from Matrix specifications.
|
||||||
*/
|
*/
|
||||||
@ -126,6 +128,7 @@ object EventType {
|
|||||||
|
|
||||||
fun isVerificationEvent(type: String): Boolean {
|
fun isVerificationEvent(type: String): Boolean {
|
||||||
return when (type) {
|
return when (type) {
|
||||||
|
MSGTYPE_VERIFICATION_REQUEST,
|
||||||
KEY_VERIFICATION_START,
|
KEY_VERIFICATION_START,
|
||||||
KEY_VERIFICATION_ACCEPT,
|
KEY_VERIFICATION_ACCEPT,
|
||||||
KEY_VERIFICATION_KEY,
|
KEY_VERIFICATION_KEY,
|
||||||
|
@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto.tasks
|
|||||||
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.MXUsersDevicesMap
|
import org.matrix.android.sdk.api.session.crypto.model.MXUsersDevicesMap
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.internal.crypto.api.CryptoApi
|
import org.matrix.android.sdk.internal.crypto.api.CryptoApi
|
||||||
import org.matrix.android.sdk.internal.crypto.model.rest.SendToDeviceBody
|
import org.matrix.android.sdk.internal.crypto.model.rest.SendToDeviceBody
|
||||||
@ -39,7 +40,9 @@ internal interface SendToDeviceTask : Task<SendToDeviceTask.Params, Unit> {
|
|||||||
// the content to send. Map from user_id to device_id to content dictionary.
|
// the content to send. Map from user_id to device_id to content dictionary.
|
||||||
val contentMap: MXUsersDevicesMap<Any>,
|
val contentMap: MXUsersDevicesMap<Any>,
|
||||||
// the transactionId. If not provided, a transactionId will be created by the task
|
// the transactionId. If not provided, a transactionId will be created by the task
|
||||||
val transactionId: String? = null
|
val transactionId: String? = null,
|
||||||
|
// add tracing id, notice that to device events that do signature on content might be broken by it
|
||||||
|
val addTracingIds: Boolean = !EventType.isVerificationEvent(eventType),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +58,12 @@ internal class DefaultSendToDeviceTask @Inject constructor(
|
|||||||
val txnId = params.transactionId ?: createUniqueTxnId()
|
val txnId = params.transactionId ?: createUniqueTxnId()
|
||||||
|
|
||||||
// add id tracing to debug
|
// add id tracing to debug
|
||||||
val decorated = decorateWithToDeviceTracingIds(params)
|
val decorated = if (params.addTracingIds) {
|
||||||
|
decorateWithToDeviceTracingIds(params)
|
||||||
|
} else {
|
||||||
|
params.contentMap.map to emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
val sendToDeviceBody = SendToDeviceBody(
|
val sendToDeviceBody = SendToDeviceBody(
|
||||||
messages = decorated.first
|
messages = decorated.first
|
||||||
)
|
)
|
||||||
|
@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
|||||||
import org.matrix.android.sdk.api.session.crypto.model.DevicesListResponse
|
import org.matrix.android.sdk.api.session.crypto.model.DevicesListResponse
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.MXUsersDevicesMap
|
import org.matrix.android.sdk.api.session.crypto.model.MXUsersDevicesMap
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.message.MessageType
|
||||||
import org.matrix.android.sdk.internal.crypto.api.CryptoApi
|
import org.matrix.android.sdk.internal.crypto.api.CryptoApi
|
||||||
import org.matrix.android.sdk.internal.crypto.model.rest.DeleteDeviceParams
|
import org.matrix.android.sdk.internal.crypto.model.rest.DeleteDeviceParams
|
||||||
import org.matrix.android.sdk.internal.crypto.model.rest.DeleteDevicesParams
|
import org.matrix.android.sdk.internal.crypto.model.rest.DeleteDevicesParams
|
||||||
@ -60,8 +61,28 @@ class DefaultSendToDeviceTaskTest {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val fakeStartVerificationContent = mapOf(
|
||||||
|
"method" to "m.sas.v1",
|
||||||
|
"from_device" to "MNQHVEISFQ",
|
||||||
|
"key_agreement_protocols" to listOf(
|
||||||
|
"curve25519-hkdf-sha256",
|
||||||
|
"curve25519"
|
||||||
|
),
|
||||||
|
"hashes" to listOf("sha256"),
|
||||||
|
"message_authentication_codes" to listOf(
|
||||||
|
"org.matrix.msc3783.hkdf-hmac-sha256",
|
||||||
|
"hkdf-hmac-sha256",
|
||||||
|
"hmac-sha256"
|
||||||
|
),
|
||||||
|
"short_authentication_string" to listOf(
|
||||||
|
"decimal",
|
||||||
|
"emoji"
|
||||||
|
),
|
||||||
|
"transaction_id" to "4wNOpkHGwGZPXjkZToooCDWfb8hsf7vW"
|
||||||
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `tracing id should be added to all to_device contents`() {
|
fun `tracing id should be added to to_device contents`() {
|
||||||
val fakeCryptoAPi = FakeCryptoApi()
|
val fakeCryptoAPi = FakeCryptoApi()
|
||||||
|
|
||||||
val sendToDeviceTask = DefaultSendToDeviceTask(
|
val sendToDeviceTask = DefaultSendToDeviceTask(
|
||||||
@ -107,6 +128,80 @@ class DefaultSendToDeviceTaskTest {
|
|||||||
println("modified content ${fakeCryptoAPi.body}")
|
println("modified content ${fakeCryptoAPi.body}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `tracing id should not be added to verification start to_device contents`() {
|
||||||
|
val fakeCryptoAPi = FakeCryptoApi()
|
||||||
|
|
||||||
|
val sendToDeviceTask = DefaultSendToDeviceTask(
|
||||||
|
cryptoApi = fakeCryptoAPi,
|
||||||
|
globalErrorReceiver = mockk(relaxed = true)
|
||||||
|
)
|
||||||
|
val contentMap = MXUsersDevicesMap<Any>()
|
||||||
|
contentMap.setObject("@alice:example.com", "MNQHVEISFQ", fakeStartVerificationContent)
|
||||||
|
|
||||||
|
val params = SendToDeviceTask.Params(
|
||||||
|
eventType = EventType.KEY_VERIFICATION_START,
|
||||||
|
contentMap = contentMap
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
sendToDeviceTask.execute(params)
|
||||||
|
}
|
||||||
|
|
||||||
|
val modifiedContent = fakeCryptoAPi.body!!.messages!!["@alice:example.com"]!!["MNQHVEISFQ"] as Map<*, *>
|
||||||
|
Assert.assertNull("Tracing id should not have been added", modifiedContent["org.matrix.msgid"])
|
||||||
|
|
||||||
|
// try to force
|
||||||
|
runBlocking {
|
||||||
|
sendToDeviceTask.execute(
|
||||||
|
SendToDeviceTask.Params(
|
||||||
|
eventType = EventType.KEY_VERIFICATION_START,
|
||||||
|
contentMap = contentMap,
|
||||||
|
addTracingIds = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val modifiedContentForced = fakeCryptoAPi.body!!.messages!!["@alice:example.com"]!!["MNQHVEISFQ"] as Map<*, *>
|
||||||
|
Assert.assertNotNull("Tracing id should have been added", modifiedContentForced["org.matrix.msgid"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `tracing id should not be added to all verification to_device contents`() {
|
||||||
|
val fakeCryptoAPi = FakeCryptoApi()
|
||||||
|
|
||||||
|
val sendToDeviceTask = DefaultSendToDeviceTask(
|
||||||
|
cryptoApi = fakeCryptoAPi,
|
||||||
|
globalErrorReceiver = mockk(relaxed = true)
|
||||||
|
)
|
||||||
|
val contentMap = MXUsersDevicesMap<Any>()
|
||||||
|
contentMap.setObject("@alice:example.com", "MNQHVEISFQ", emptyMap<String, Any>())
|
||||||
|
|
||||||
|
val verificationEvents = listOf(
|
||||||
|
MessageType.MSGTYPE_VERIFICATION_REQUEST,
|
||||||
|
EventType.KEY_VERIFICATION_START,
|
||||||
|
EventType.KEY_VERIFICATION_ACCEPT,
|
||||||
|
EventType.KEY_VERIFICATION_KEY,
|
||||||
|
EventType.KEY_VERIFICATION_MAC,
|
||||||
|
EventType.KEY_VERIFICATION_CANCEL,
|
||||||
|
EventType.KEY_VERIFICATION_DONE,
|
||||||
|
EventType.KEY_VERIFICATION_READY
|
||||||
|
)
|
||||||
|
|
||||||
|
for (type in verificationEvents) {
|
||||||
|
val params = SendToDeviceTask.Params(
|
||||||
|
eventType = type,
|
||||||
|
contentMap = contentMap
|
||||||
|
)
|
||||||
|
runBlocking {
|
||||||
|
sendToDeviceTask.execute(params)
|
||||||
|
}
|
||||||
|
|
||||||
|
val modifiedContent = fakeCryptoAPi.body!!.messages!!["@alice:example.com"]!!["MNQHVEISFQ"] as Map<*, *>
|
||||||
|
Assert.assertNull("Tracing id should not have been added", modifiedContent["org.matrix.msgid"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal class FakeCryptoApi : CryptoApi {
|
internal class FakeCryptoApi : CryptoApi {
|
||||||
override suspend fun getDevices(): DevicesListResponse {
|
override suspend fun getDevices(): DevicesListResponse {
|
||||||
throw java.lang.AssertionError("Should not be called")
|
throw java.lang.AssertionError("Should not be called")
|
||||||
|
Loading…
Reference in New Issue
Block a user