From 0e1e0bcbaaa56ccbad9eb041fdcef55baba12970 Mon Sep 17 00:00:00 2001 From: Ezequiel Leanes Date: Tue, 12 Mar 2024 13:55:05 -0300 Subject: [PATCH] fix: senderHmac parameter in MessageV2Builder (#199) * fix: senderHmac parameter in MessageV2Builder * add senderHmacGenerated to tamperedMessage in ConversationTest --- .../org/xmtp/android/library/ConversationTest.kt | 14 ++++++++++++-- .../org/xmtp/android/library/messages/MessageV2.kt | 3 ++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/library/src/androidTest/java/org/xmtp/android/library/ConversationTest.kt b/library/src/androidTest/java/org/xmtp/android/library/ConversationTest.kt index 0b0e87155..2ab2dc4ab 100644 --- a/library/src/androidTest/java/org/xmtp/android/library/ConversationTest.kt +++ b/library/src/androidTest/java/org/xmtp/android/library/ConversationTest.kt @@ -3,6 +3,7 @@ package org.xmtp.android.library import androidx.test.ext.junit.runners.AndroidJUnit4 import app.cash.turbine.test import com.google.protobuf.kotlin.toByteString +import com.google.protobuf.kotlin.toByteStringUtf8 import kotlinx.coroutines.ExperimentalCoroutinesApi import org.junit.Assert import org.junit.Assert.assertEquals @@ -228,12 +229,21 @@ class ConversationTest { signedBytes, additionalData = headerBytes, ) + val thirtyDayPeriodsSinceEpoch = + (Date().time / 1000 / 60 / 60 / 24 / 30).toInt() + val info = "$thirtyDayPeriodsSinceEpoch-${aliceClient.address}" + val infoEncoded = info.toByteStringUtf8().toByteArray() + val senderHmacGenerated = + Crypto.calculateMac( + Crypto.deriveKey(aliceConversation.keyMaterial!!, ByteArray(0), infoEncoded), + headerBytes + ) val tamperedMessage = MessageV2Builder.buildFromCipherText( headerBytes = headerBytes, ciphertext = ciphertext, - senderHmac = null, - shouldPush = true, + senderHmac = senderHmacGenerated, + shouldPush = codec.shouldPush("this is a fake"), ) val tamperedEnvelope = EnvelopeBuilder.buildFromString( topic = aliceConversation.topic, diff --git a/library/src/main/java/org/xmtp/android/library/messages/MessageV2.kt b/library/src/main/java/org/xmtp/android/library/messages/MessageV2.kt index e6f9302e7..00fd92f1b 100644 --- a/library/src/main/java/org/xmtp/android/library/messages/MessageV2.kt +++ b/library/src/main/java/org/xmtp/android/library/messages/MessageV2.kt @@ -25,7 +25,7 @@ class MessageV2Builder(val senderHmac: ByteArray? = null, val shouldPush: Boolea fun buildFromCipherText( headerBytes: ByteArray, ciphertext: CipherText?, - senderHmac: ByteArray?, + senderHmac: ByteArray, shouldPush: Boolean, ): MessageV2Builder { val messageBuilder = MessageV2Builder(senderHmac = senderHmac, shouldPush = shouldPush) @@ -33,6 +33,7 @@ class MessageV2Builder(val senderHmac: ByteArray? = null, val shouldPush: Boolea it.headerBytes = headerBytes.toByteString() it.ciphertext = ciphertext it.shouldPush = shouldPush + it.senderHmac = senderHmac.toByteString() }.build() return messageBuilder }