From 9dde43f65b75580e9d4337b44f99e7660c537cfa Mon Sep 17 00:00:00 2001
From: Benoit Marty <benoitm@matrix.org>
Date: Thu, 30 Jan 2020 23:15:19 +0100
Subject: [PATCH] PR Review: var -> val, internal and other cleanup

---
 .../matrix/android/common/CommonTestHelper.kt |  9 +++--
 .../crypto/crosssigning/XSigningTest.kt       | 33 +++++++++----------
 .../crypto/keysbackup/KeysBackupTest.kt       |  3 +-
 .../internal/crypto/verification/SASTest.kt   | 18 +++++-----
 .../crypto/crosssigning/MXCrossSigningInfo.kt |  9 ++---
 .../session/crypto/sas/VerificationService.kt |  6 ++--
 .../android/api/session/events/model/Event.kt |  6 ++--
 .../internal/crypto/DeviceListManager.kt      | 24 +++++++++-----
 .../DefaultCrossSigningService.kt             | 12 +++----
 .../crypto/crosssigning/DeviceTrustLevel.kt   |  6 ++--
 .../crypto/crosssigning/DeviceTrustResult.kt  |  7 ++--
 .../crypto/crosssigning/UserTrustResult.kt    |  8 ++---
 .../crypto/model/CryptoCrossSigningKey.kt     | 18 +++++++++-
 .../internal/crypto/model/CryptoDeviceInfo.kt | 11 +++----
 .../internal/crypto/model/CryptoInfoMapper.kt |  6 +---
 .../crypto/model/rest/DeleteDeviceParams.kt   |  2 +-
 .../internal/crypto/model/rest/DeviceKeys.kt  |  1 -
 .../crypto/model/rest/KeyChangesResponse.kt   |  2 +-
 .../model/rest/KeyVerificationAccept.kt       | 26 +++++++--------
 .../model/rest/KeyVerificationCancel.kt       |  4 +--
 .../crypto/model/rest/KeyVerificationKey.kt   |  2 +-
 .../crypto/model/rest/KeyVerificationReady.kt |  2 +-
 .../crypto/model/rest/KeysClaimBody.kt        |  2 +-
 .../crypto/model/rest/KeysClaimResponse.kt    |  2 +-
 .../crypto/model/rest/KeysQueryBody.kt        |  2 +-
 .../crypto/model/rest/KeysQueryResponse.kt    | 13 ++++----
 .../crypto/model/rest/KeysUploadBody.kt       |  6 ++--
 .../crypto/model/rest/KeysUploadResponse.kt   |  2 +-
 .../crypto/model/rest/RestDeviceInfo.kt       | 15 +++++----
 .../internal/crypto/model/rest/RestKeyInfo.kt |  2 +-
 .../crypto/model/rest/RoomKeyShare.kt         |  2 +-
 .../model/rest/RoomKeyShareCancellation.kt    |  2 +-
 .../crypto/model/rest/RoomKeyShareRequest.kt  |  3 +-
 .../crypto/model/rest/SendToDeviceBody.kt     | 19 +++++------
 .../model/rest/SignatureUploadResponse.kt     |  7 ++--
 .../crypto/model/rest/UpdateDeviceInfoBody.kt |  4 +--
 .../model/rest/UploadSignatureQueryBuilder.kt |  6 ++--
 .../crypto/model/rest/UserPasswordAuth.kt     |  8 ++---
 .../crypto/store/db/model/DeviceInfoEntity.kt |  3 +-
 .../crypto/store/db/model/TrustLevelEntity.kt | 18 +++++++++-
 .../tasks/DeleteDeviceWithUserPasswordTask.kt | 20 +++++------
 .../tasks/RoomVerificationUpdateTask.kt       | 12 +++----
 .../internal/crypto/tasks/SendToDeviceTask.kt |  5 +--
 .../internal/crypto/tasks/UploadKeysTask.kt   | 13 +++-----
 .../SendVerificationMessageWorker.kt          |  3 +-
 .../crypto/verification/VerificationInfo.kt   | 11 ++++++-
 .../verification/VerificationInfoAccept.kt    |  3 --
 .../verification/VerificationInfoCancel.kt    |  2 --
 .../verification/VerificationInfoKey.kt       |  2 --
 .../verification/VerificationInfoMac.kt       |  3 --
 .../verification/VerificationInfoReady.kt     |  4 +--
 .../verification/VerificationInfoStart.kt     |  7 ----
 .../VerificationMessageLiveObserver.kt        |  4 +--
 .../session/room/send/SendEventWorker.kt      |  3 +-
 .../session/sync/CryptoSyncHandler.kt         |  4 +--
 .../CrossSigningSettingsFragment.kt           |  3 +-
 .../CrossSigningSettingsViewModel.kt          |  2 +-
 vector/src/main/res/values/strings.xml        |  3 +-
 58 files changed, 224 insertions(+), 211 deletions(-)

diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt
index 97ed8ca6c5..297dc59665 100644
--- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt
+++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt
@@ -37,8 +37,11 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
-import org.junit.Assert.*
-import java.util.*
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import java.util.ArrayList
+import java.util.UUID
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
 
@@ -280,7 +283,7 @@ class CommonTestHelper(context: Context) {
 
     fun signout(session: Session) {
         val lock = CountDownLatch(1)
-        session.signOut(true, object : TestMatrixCallback<Unit>(lock) {})
+        session.signOut(true, TestMatrixCallback(lock))
         await(lock)
     }
 }
diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt
index 605fcd5f76..c8e7355d7a 100644
--- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt
@@ -12,6 +12,7 @@ import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
 import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap
 import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
 import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNotNull
 import org.junit.Assert.assertNull
 import org.junit.Assert.assertTrue
@@ -73,14 +74,12 @@ class XSigningTest : InstrumentedTest {
                 password = TestConstants.PASSWORD
         )
 
-        val aliceLatch = CountDownLatch(1)
-        val bobLatch = CountDownLatch(1)
+        val latch = CountDownLatch(2)
 
-        aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(aliceLatch))
-        bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(bobLatch))
+        aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(latch))
+        bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(latch))
 
-        mTestHelper.await(aliceLatch)
-        mTestHelper.await(bobLatch)
+        mTestHelper.await(latch)
 
         // Check that alice can see bob keys
         val downloadLatch = CountDownLatch(1)
@@ -88,14 +87,14 @@ class XSigningTest : InstrumentedTest {
         mTestHelper.await(downloadLatch)
 
         val bobKeysFromAlicePOV = aliceSession.getCrossSigningService().getUserCrossSigningKeys(bobSession.myUserId)
-        assertNotNull("Alice can see bob Master key", bobKeysFromAlicePOV?.masterKey())
-        assertNull("Alice should not see bob User key", bobKeysFromAlicePOV?.userKey())
-        assertNotNull("Alice can see bob SelfSigned key", bobKeysFromAlicePOV?.selfSigningKey())
+        assertNotNull("Alice can see bob Master key", bobKeysFromAlicePOV!!.masterKey())
+        assertNull("Alice should not see bob User key", bobKeysFromAlicePOV.userKey())
+        assertNotNull("Alice can see bob SelfSigned key", bobKeysFromAlicePOV.selfSigningKey())
 
-        assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV?.masterKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.masterKey()?.unpaddedBase64PublicKey)
-        assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV?.selfSigningKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.selfSigningKey()?.unpaddedBase64PublicKey)
+        assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV.masterKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.masterKey()?.unpaddedBase64PublicKey)
+        assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV.selfSigningKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.selfSigningKey()?.unpaddedBase64PublicKey)
 
-        assertTrue("Bob keys from alice pov should not be trusted", bobKeysFromAlicePOV?.isTrusted() == false)
+        assertFalse("Bob keys from alice pov should not be trusted", bobKeysFromAlicePOV.isTrusted())
 
         mTestHelper.signout(aliceSession)
         mTestHelper.signout(bobSession)
@@ -117,14 +116,12 @@ class XSigningTest : InstrumentedTest {
                 password = TestConstants.PASSWORD
         )
 
-        val aliceLatch = CountDownLatch(1)
-        val bobLatch = CountDownLatch(1)
+        val latch = CountDownLatch(2)
 
-        aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(aliceLatch))
-        bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(bobLatch))
+        aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(latch))
+        bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(latch))
 
-        mTestHelper.await(aliceLatch)
-        mTestHelper.await(bobLatch)
+        mTestHelper.await(latch)
 
         // Check that alice can see bob keys
         val downloadLatch = CountDownLatch(1)
diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt
index 03dba96d40..312ad03a06 100644
--- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt
@@ -314,7 +314,8 @@ class KeysBackupTest : InstrumentedTest {
         val sessionData = keysBackup
                 .decryptKeyBackupData(keyBackupData,
                         session.olmInboundGroupSession!!.sessionIdentifier(),
-                        cryptoTestData.roomId, decryption!!)
+                        cryptoTestData.roomId,
+                        decryption!!)
         assertNotNull(sessionData)
         // - Compare the decrypted megolm key with the original one
         assertKeysEquals(session.exportKeys(), sessionData)
diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt
index a381ccf091..6ae2489993 100644
--- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt
@@ -47,7 +47,6 @@ import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.MethodSorters
-import java.util.ArrayList
 import java.util.concurrent.CountDownLatch
 
 @RunWith(AndroidJUnit4::class)
@@ -78,7 +77,10 @@ class SASTest : InstrumentedTest {
         }
         bobVerificationService.addListener(bobListener)
 
-        val txID = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobSession.myUserId, bobSession.getMyDevice().deviceId)
+        val txID = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS,
+                bobSession.myUserId,
+                bobSession.getMyDevice().deviceId,
+                null)
         assertNotNull("Alice should have a started transaction", txID)
 
         val aliceKeyTx = aliceVerificationService.getExistingTransaction(bobSession.myUserId, txID!!)
@@ -325,7 +327,7 @@ class SASTest : InstrumentedTest {
 
         val aliceCreatedLatch = CountDownLatch(2)
         val aliceCancelledLatch = CountDownLatch(2)
-        val createdTx = ArrayList<SASDefaultVerificationTransaction>()
+        val createdTx = mutableListOf<SASDefaultVerificationTransaction>()
         val aliceListener = object : VerificationService.VerificationListener {
             override fun transactionCreated(tx: VerificationTransaction) {
                 createdTx.add(tx as SASDefaultVerificationTransaction)
@@ -344,8 +346,8 @@ class SASTest : InstrumentedTest {
 
         val bobUserId = bobSession!!.myUserId
         val bobDeviceId = bobSession.getMyDevice().deviceId
-        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId)
-        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId)
+        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null)
+        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null)
 
         mTestHelper.await(aliceCreatedLatch)
         mTestHelper.await(aliceCancelledLatch)
@@ -402,7 +404,7 @@ class SASTest : InstrumentedTest {
 
         val bobUserId = bobSession.myUserId
         val bobDeviceId = bobSession.getMyDevice().deviceId
-        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId)
+        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null)
         mTestHelper.await(aliceAcceptedLatch)
 
         assertTrue("Should have receive a commitment", accepted!!.commitment?.trim()?.isEmpty() == false)
@@ -471,7 +473,7 @@ class SASTest : InstrumentedTest {
 
         val bobUserId = bobSession.myUserId
         val bobDeviceId = bobSession.getMyDevice().deviceId
-        val verificationSAS = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId)
+        val verificationSAS = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null)
         mTestHelper.await(aliceSASLatch)
         mTestHelper.await(bobSASLatch)
 
@@ -541,7 +543,7 @@ class SASTest : InstrumentedTest {
 
         val bobUserId = bobSession.myUserId
         val bobDeviceId = bobSession.getMyDevice().deviceId
-        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId)
+        aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null)
         mTestHelper.await(aliceSASLatch)
         mTestHelper.await(bobSASLatch)
 
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt
index 979ff16d55..8d75fe2a91 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt
@@ -20,14 +20,11 @@ import im.vector.matrix.android.internal.crypto.model.CryptoCrossSigningKey
 import im.vector.matrix.android.internal.crypto.model.KeyUsage
 
 data class MXCrossSigningInfo(
-
-        var userId: String,
-
-        var crossSigningKeys: List<CryptoCrossSigningKey> = ArrayList()
-
+        val userId: String,
+        val crossSigningKeys: List<CryptoCrossSigningKey>
 ) {
 
-    fun isTrusted() : Boolean = masterKey()?.trustLevel?.isVerified() == true
+    fun isTrusted(): Boolean = masterKey()?.trustLevel?.isVerified() == true
             && selfSigningKey()?.trustLevel?.isVerified() == true
 
     fun masterKey(): CryptoCrossSigningKey? = crossSigningKeys
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt
index 35337d10d7..0dd143f792 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt
@@ -58,16 +58,14 @@ interface VerificationService {
     fun requestKeyVerificationInDMs(methods: List<VerificationMethod>,
                                     otherUserId: String,
                                     roomId: String,
-                                    localId: String? = LocalEcho.createLocalEchoId()
-    ): PendingVerificationRequest
+                                    localId: String? = LocalEcho.createLocalEchoId()): PendingVerificationRequest
 
     /**
      * Request a key verification from another user using toDevice events.
      */
     fun requestKeyVerification(methods: List<VerificationMethod>,
                                otherUserId: String,
-                               otherDevices: List<String>?
-    ): PendingVerificationRequest
+                               otherDevices: List<String>?): PendingVerificationRequest
 
     fun declineVerificationRequestInDMs(otherUserId: String,
                                         otherDeviceId: String,
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt
index ab39dea178..553c36a9f4 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt
@@ -86,9 +86,9 @@ data class Event(
     var sendState: SendState = SendState.UNKNOWN
 
     /**
-    The `age` value transcoded in a timestamp based on the device clock when the SDK received
-    the event from the home server.
-    Unlike `age`, this value is static.
+     * The `age` value transcoded in a timestamp based on the device clock when the SDK received
+     * the event from the home server.
+     * Unlike `age`, this value is static.
      */
     @Transient
     var ageLocalTs: Long? = null
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt
index 5265ede87d..bc5add34a1 100755
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt
@@ -42,22 +42,28 @@ internal class DeviceListManager @Inject constructor(private val cryptoStore: IM
         fun onUsersDeviceUpdate(users: List<String>)
     }
 
-    private val deviceChangeListeners = ArrayList<UserDevicesUpdateListener>()
+    private val deviceChangeListeners = mutableListOf<UserDevicesUpdateListener>()
 
     fun addListener(listener: UserDevicesUpdateListener) {
-        deviceChangeListeners.add(listener)
+        synchronized(deviceChangeListeners) {
+            deviceChangeListeners.add(listener)
+        }
     }
 
     fun removeListener(listener: UserDevicesUpdateListener) {
-        deviceChangeListeners.remove(listener)
+        synchronized(deviceChangeListeners) {
+            deviceChangeListeners.remove(listener)
+        }
     }
 
-    fun dispatchDeviceChange(users: List<String>) {
-        deviceChangeListeners.forEach {
-            try {
-                it.onUsersDeviceUpdate(users)
-            } catch (failure: Throwable) {
-                Timber.e(failure, "Failed to dispatch device chande")
+    private fun dispatchDeviceChange(users: List<String>) {
+        synchronized(deviceChangeListeners) {
+            deviceChangeListeners.forEach {
+                try {
+                    it.onUsersDeviceUpdate(users)
+                } catch (failure: Throwable) {
+                    Timber.e(failure, "Failed to dispatch device change")
+                }
             }
         }
     }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt
index 0c13daf560..6214ae0321 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt
@@ -271,13 +271,13 @@ internal class DefaultCrossSigningService @Inject constructor(
     }
 
     private fun clearSigningKeys() {
-        this@DefaultCrossSigningService.masterPkSigning?.releaseSigning()
-        this@DefaultCrossSigningService.userPkSigning?.releaseSigning()
-        this@DefaultCrossSigningService.selfSigningPkSigning?.releaseSigning()
+        masterPkSigning?.releaseSigning()
+        userPkSigning?.releaseSigning()
+        selfSigningPkSigning?.releaseSigning()
 
-        this@DefaultCrossSigningService.masterPkSigning = null
-        this@DefaultCrossSigningService.userPkSigning = null
-        this@DefaultCrossSigningService.selfSigningPkSigning = null
+        masterPkSigning = null
+        userPkSigning = null
+        selfSigningPkSigning = null
 
         cryptoStore.setMyCrossSigningInfo(null)
         cryptoStore.storePrivateKeysInfo(null, null, null)
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt
index 4b08caf375..075b141f8d 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt
@@ -15,8 +15,10 @@
  */
 package im.vector.matrix.android.internal.crypto.crosssigning
 
-data class DeviceTrustLevel(val crossSigningVerified: Boolean, val locallyVerified: Boolean?) {
-
+data class DeviceTrustLevel(
+        val crossSigningVerified: Boolean,
+        val locallyVerified: Boolean?
+) {
     fun isVerified() = crossSigningVerified || locallyVerified == true
     fun isCrossSigningVerified() = crossSigningVerified
     fun isLocallyVerified() = locallyVerified
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt
index d1a1c83cd2..27d2c1e76d 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt
@@ -18,7 +18,6 @@ package im.vector.matrix.android.internal.crypto.crosssigning
 import im.vector.matrix.android.api.session.crypto.crosssigning.MXCrossSigningInfo
 
 sealed class DeviceTrustResult {
-
     data class Success(val level: DeviceTrustLevel) : DeviceTrustResult()
     data class UnknownDevice(val deviceID: String) : DeviceTrustResult()
     data class CrossSigningNotConfigured(val userID: String) : DeviceTrustResult()
@@ -27,6 +26,6 @@ sealed class DeviceTrustResult {
     data class InvalidDeviceSignature(val deviceId: String, val signingKey: String, val throwable: Throwable?) : DeviceTrustResult()
 }
 
-fun DeviceTrustResult.isSuccess(): Boolean = this is DeviceTrustResult.Success
-fun DeviceTrustResult.isCrossSignedVerified(): Boolean = (this as? DeviceTrustResult.Success)?.level?.isCrossSigningVerified() == true
-fun DeviceTrustResult.isLocallyVerified(): Boolean = (this as? DeviceTrustResult.Success)?.level?.isLocallyVerified() == true
+fun DeviceTrustResult.isSuccess() = this is DeviceTrustResult.Success
+fun DeviceTrustResult.isCrossSignedVerified() = this is DeviceTrustResult.Success && level.isCrossSigningVerified()
+fun DeviceTrustResult.isLocallyVerified() = this is DeviceTrustResult.Success && level.isLocallyVerified() == true
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt
index d8c616cb64..c4235531fb 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt
@@ -13,19 +13,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package im.vector.matrix.android.internal.crypto.crosssigning
 
 import im.vector.matrix.android.api.session.crypto.crosssigning.MXCrossSigningInfo
 import im.vector.matrix.android.internal.crypto.model.CryptoCrossSigningKey
 
 sealed class UserTrustResult {
-
     object Success : UserTrustResult()
 
-//    data class Success(val deviceID: String, val crossSigned: Boolean) : UserTrustResult()
-//
-//    data class UnknownDevice(val deviceID: String) : UserTrustResult()
+    // data class Success(val deviceID: String, val crossSigned: Boolean) : UserTrustResult()
+    // data class UnknownDevice(val deviceID: String) : UserTrustResult()
     data class CrossSigningNotConfigured(val userID: String) : UserTrustResult()
+
     data class UnknownCrossSignatureInfo(val userID: String) : UserTrustResult()
     data class KeysNotTrusted(val key: MXCrossSigningInfo) : UserTrustResult()
     data class KeyNotSigned(val key: CryptoCrossSigningKey) : UserTrustResult()
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt
index bd438c54f2..b12eaabaed 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2020 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package im.vector.matrix.android.internal.crypto.model
 
 import im.vector.matrix.android.internal.crypto.crosssigning.DeviceTrustLevel
@@ -87,6 +103,6 @@ enum class KeyUsage(val value: String) {
     USER_SIGNING("user_signing")
 }
 
-fun CryptoCrossSigningKey.toRest(): RestKeyInfo {
+internal fun CryptoCrossSigningKey.toRest(): RestKeyInfo {
     return CryptoInfoMapper.map(this)
 }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt
index cede23f16a..8f6d64221c 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt
@@ -29,15 +29,12 @@ data class CryptoDeviceInfo(
         override val signatures: Map<String, Map<String, String>>? = null,
         val unsigned: JsonDict? = null,
 
-// TODO how to store if this device is verified by a user SSK, or is legacy trusted?
-// I need to know if it is trusted via cross signing (Trusted because bob verified it)
+        // TODO how to store if this device is verified by a user SSK, or is legacy trusted?
+        // I need to know if it is trusted via cross signing (Trusted because bob verified it)
 
         var trustLevel: DeviceTrustLevel? = null,
         var isBlocked: Boolean = false
-
-)
-
-    : CryptoInfo {
+) : CryptoInfo {
 
     val isVerified: Boolean
         get() = trustLevel?.isVerified() ?: false
@@ -93,7 +90,7 @@ data class CryptoDeviceInfo(
 //    }
 }
 
-fun CryptoDeviceInfo.toRest(): RestDeviceInfo {
+internal fun CryptoDeviceInfo.toRest(): RestDeviceInfo {
     return CryptoInfoMapper.map(this)
 }
 
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt
index 8d216f3160..4459d508ff 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt
@@ -15,14 +15,10 @@
  */
 package im.vector.matrix.android.internal.crypto.model
 
-import com.squareup.moshi.Moshi
 import im.vector.matrix.android.internal.crypto.model.rest.RestDeviceInfo
 import im.vector.matrix.android.internal.crypto.model.rest.RestKeyInfo
-import im.vector.matrix.android.internal.di.SerializeNulls
 
-object CryptoInfoMapper {
-
-    private val moshi = Moshi.Builder().add(SerializeNulls.JSON_ADAPTER_FACTORY).build()
+internal object CryptoInfoMapper {
 
     fun map(restDeviceInfo: RestDeviceInfo): CryptoDeviceInfo {
         return CryptoDeviceInfo(
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt
index fc8eff2875..fa4daa112c 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt
@@ -24,5 +24,5 @@ import com.squareup.moshi.JsonClass
 @JsonClass(generateAdapter = true)
 internal data class DeleteDeviceParams(
         @Json(name = "auth")
-        var userPasswordAuth: UserPasswordAuth? = null
+        val userPasswordAuth: UserPasswordAuth? = null
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt
index 27a3480d0e..563e0499ae 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt
@@ -38,5 +38,4 @@ data class DeviceKeys(
 
         @Json(name = "usage")
         val usage: List<String>? = null
-
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt
index 5a48f547f9..12d27a023f 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt
@@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass
  * This class describes the key changes response
  */
 @JsonClass(generateAdapter = true)
-data class KeyChangesResponse(
+internal data class KeyChangesResponse(
         // list of user ids which have new devices
         @Json(name = "changed")
         var changed: List<String>? = null,
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt
index ef30986124..dc6075ca43 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt
@@ -33,31 +33,31 @@ internal data class KeyVerificationAccept(
          * Alice’s device should record this ID and use it in future messages in this transaction.
          */
         @Json(name = "transaction_id")
-        override var transactionID: String? = null,
+        override val transactionID: String? = null,
 
         /**
          * The key agreement protocol that Bob’s device has selected to use, out of the list proposed by Alice’s device
          */
         @Json(name = "key_agreement_protocol")
-        override var keyAgreementProtocol: String? = null,
+        override val keyAgreementProtocol: String? = null,
 
         /**
          * The hash algorithm that Bob’s device has selected to use, out of the list proposed by Alice’s device
          */
         @Json(name = "hash")
-        override var hash: String? = null,
+        override val hash: String? = null,
 
         /**
          * The message authentication code that Bob’s device has selected to use, out of the list proposed by Alice’s device
          */
         @Json(name = "message_authentication_code")
-        override var messageAuthenticationCode: String? = null,
+        override val messageAuthenticationCode: String? = null,
 
         /**
          * An array of short authentication string methods that Bob’s client (and Bob) understands.  Must be a subset of the list proposed by Alice’s device
          */
         @Json(name = "short_authentication_string")
-        override var shortAuthenticationStrings: List<String>? = null,
+        override val shortAuthenticationStrings: List<String>? = null,
 
         /**
          * The hash (encoded as unpadded base64) of the concatenation of the device’s ephemeral public key (QB, encoded as unpadded base64)
@@ -89,14 +89,14 @@ internal data class KeyVerificationAccept(
                             commitment: String,
                             messageAuthenticationCode: String,
                             shortAuthenticationStrings: List<String>): VerificationInfoAccept {
-            return KeyVerificationAccept().apply {
-                this.transactionID = tid
-                this.keyAgreementProtocol = keyAgreementProtocol
-                this.hash = hash
-                this.commitment = commitment
-                this.messageAuthenticationCode = messageAuthenticationCode
-                this.shortAuthenticationStrings = shortAuthenticationStrings
-            }
+            return KeyVerificationAccept(
+                    transactionID = tid,
+                    keyAgreementProtocol = keyAgreementProtocol,
+                    hash = hash,
+                    commitment = commitment,
+                    messageAuthenticationCode = messageAuthenticationCode,
+                    shortAuthenticationStrings = shortAuthenticationStrings
+            )
         }
     }
 }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt
index 818bffc942..d1ae09cc37 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt
@@ -34,12 +34,12 @@ internal data class KeyVerificationCancel(
         /**
          * machine-readable reason for cancelling, see #CancelCode
          */
-        override var code: String? = null,
+        override val code: String? = null,
 
         /**
          * human-readable reason for cancelling.  This should only be used if the receiving client does not understand the code given.
          */
-        override var reason: String? = null
+        override val reason: String? = null
 ) : SendToDeviceObject, VerificationInfoCancel {
 
     companion object {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt
index d012d03add..9a190e1e15 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt
@@ -28,7 +28,7 @@ internal data class KeyVerificationKey(
         /**
          * the ID of the transaction that the message is part of
          */
-        @Json(name = "transaction_id") override var transactionID: String? = null,
+        @Json(name = "transaction_id") override val transactionID: String? = null,
 
         /**
          * The device’s ephemeral public key, as an unpadded base64 string
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt
index 84bc73fda0..004477e90b 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt
@@ -26,7 +26,7 @@ import im.vector.matrix.android.internal.crypto.verification.VerificationInfoRea
 internal data class KeyVerificationReady(
         @Json(name = "from_device") override val fromDevice: String?,
         @Json(name = "methods") override val methods: List<String>?,
-        @Json(name = "transaction_id") override var transactionID: String? = null
+        @Json(name = "transaction_id") override val transactionID: String? = null
 ) : SendToDeviceObject, VerificationInfoReady {
 
     override fun toSendToDeviceObject() = this
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt
index 87b9891ffa..38f6615dad 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt
@@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass
  * This class represents the response to /keys/claim request made by claimOneTimeKeysForUsersDevices.
  */
 @JsonClass(generateAdapter = true)
-data class KeysClaimBody(
+internal data class KeysClaimBody(
 
         /**
          * The time (in milliseconds) to wait when downloading keys from remote servers. 10 seconds is the recommended default.
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt
index 976743d8bc..59567ba77a 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt
@@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass
  * This class represents the response to /keys/claim request made by claimOneTimeKeysForUsersDevices.
  */
 @JsonClass(generateAdapter = true)
-data class KeysClaimResponse(
+internal data class KeysClaimResponse(
 
         /**
          * The requested keys ordered by device by user.
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt
index 769a28f7e7..3dca696fcd 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt
@@ -24,7 +24,7 @@ import com.squareup.moshi.JsonClass
  * This class represents the body to /keys/query
  */
 @JsonClass(generateAdapter = true)
-data class KeysQueryBody(
+internal data class KeysQueryBody(
 
         /**
          * The time (in milliseconds) to wait when downloading keys from remote servers. 10 seconds is the recommended default.
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt
index b2b62706a7..dd3cb049dd 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt
@@ -28,28 +28,27 @@ import com.squareup.moshi.JsonClass
  * The user_signing_keys property will only be included when a user requests their own keys.
  */
 @JsonClass(generateAdapter = true)
-data class KeysQueryResponse(
+internal data class KeysQueryResponse(
         /**
          * The device keys per devices per users.
          * Map from userId to map from deviceId to MXDeviceInfo
          * TODO Use MXUsersDevicesMap?
          */
         @Json(name = "device_keys")
-        var deviceKeys: Map<String, Map<String, RestDeviceInfo>>? = null,
+        val deviceKeys: Map<String, Map<String, RestDeviceInfo>>? = null,
 
         /**
          * The failures sorted by homeservers. TODO Bad comment ?
          * TODO Use MXUsersDevicesMap?
          */
-        var failures: Map<String, Map<String, Any>>? = null,
+        val failures: Map<String, Map<String, Any>>? = null,
 
         @Json(name = "master_keys")
-        var masterKeys: Map<String, RestKeyInfo?>? = null,
+        val masterKeys: Map<String, RestKeyInfo?>? = null,
 
         @Json(name = "self_signing_keys")
-        var selfSigningKeys: Map<String, RestKeyInfo?>? = null,
+        val selfSigningKeys: Map<String, RestKeyInfo?>? = null,
 
         @Json(name = "user_signing_keys")
-        var userSigningKeys: Map<String, RestKeyInfo?>? = null
-
+        val userSigningKeys: Map<String, RestKeyInfo?>? = null
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt
index 961125767e..2267c25534 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt
@@ -21,10 +21,10 @@ import com.squareup.moshi.JsonClass
 import im.vector.matrix.android.api.util.JsonDict
 
 @JsonClass(generateAdapter = true)
-data class KeysUploadBody(
+internal data class KeysUploadBody(
         @Json(name = "device_keys")
-        var deviceKeys: RestDeviceInfo? = null,
+        val deviceKeys: RestDeviceInfo? = null,
 
         @Json(name = "one_time_keys")
-        var oneTimeKeys: JsonDict? = null
+        val oneTimeKeys: JsonDict? = null
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt
index b68c13bf4d..38360fa1cd 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt
@@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass
  * This class represents the response to /keys/upload request made by uploadKeys.
  */
 @JsonClass(generateAdapter = true)
-data class KeysUploadResponse(
+internal data class KeysUploadResponse(
 
         /**
          * The count per algorithm as returned by the home server: a map (algorithm to count).
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt
index e057780093..1fc1e599b7 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt
@@ -20,40 +20,41 @@ import com.squareup.moshi.JsonClass
 import im.vector.matrix.android.api.util.JsonDict
 
 @JsonClass(generateAdapter = true)
-data class RestDeviceInfo(
+internal data class RestDeviceInfo(
         /**
          * The id of this device.
          */
         @Json(name = "device_id")
-        var deviceId: String,
+        val deviceId: String,
 
         /**
          * the user id
          */
         @Json(name = "user_id")
-        var userId: String,
+        val userId: String,
 
         /**
          * The list of algorithms supported by this device.
          */
         @Json(name = "algorithms")
-        var algorithms: List<String>? = null,
+        val algorithms: List<String>? = null,
 
         /**
          * A map from "<key type>:<deviceId>" to "<base64-encoded key>".
          */
         @Json(name = "keys")
-        var keys: Map<String, String>? = null,
+        val keys: Map<String, String>? = null,
 
         /**
          * The signature of this MXDeviceInfo.
          * A map from "<userId>" to a map from "<key type>:<deviceId>" to "<signature>"
          */
         @Json(name = "signatures")
-        var signatures: Map<String, Map<String, String>>? = null,
+        val signatures: Map<String, Map<String, String>>? = null,
 
         /*
          * Additional data from the home server.
          */
         @Json(name = "unsigned")
-        var unsigned: JsonDict? = null)
+        val unsigned: JsonDict? = null
+)
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt
index ffd1817402..5c4ff4d7e4 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt
@@ -21,7 +21,7 @@ import im.vector.matrix.android.internal.crypto.model.CryptoCrossSigningKey
 import im.vector.matrix.android.internal.crypto.model.CryptoInfoMapper
 
 @JsonClass(generateAdapter = true)
-data class RestKeyInfo(
+internal data class RestKeyInfo(
         /**
          * The user who owns the key
          */
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt
index 00ad490e1d..de2345e002 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt
@@ -21,7 +21,7 @@ import com.squareup.moshi.Json
  * Parent class representing an room key action request
  * Note: this class cannot be abstract because of [org.matrix.androidsdk.core.JsonUtils.toRoomKeyShare]
  */
-open class RoomKeyShare : SendToDeviceObject {
+internal open class RoomKeyShare : SendToDeviceObject {
 
     var action: String? = null
 
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt
index 768c2d71c5..fcfbfccbac 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt
@@ -21,7 +21,7 @@ import com.squareup.moshi.JsonClass
  * Class representing an room key request cancellation content
  */
 @JsonClass(generateAdapter = true)
-class RoomKeyShareCancellation : RoomKeyShare() {
+internal class RoomKeyShareCancellation : RoomKeyShare() {
     init {
         action = ACTION_SHARE_CANCELLATION
     }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt
index 0d8f7f8738..3b9d210812 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt
@@ -22,8 +22,7 @@ import com.squareup.moshi.JsonClass
  * Class representing an room key request content
  */
 @JsonClass(generateAdapter = true)
-class RoomKeyShareRequest : RoomKeyShare() {
-
+internal class RoomKeyShareRequest : RoomKeyShare() {
     var body: RoomKeyRequestBody? = null
 
     init {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt
index 8b95d7c686..df4482f0bf 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt
@@ -16,13 +16,12 @@
 
 package im.vector.matrix.android.internal.crypto.model.rest
 
-class SendToDeviceBody {
-
-    /**
-     * `Any` should implement [SendToDeviceObject], but we cannot use interface here because of Json serialization
-     *
-     * The messages to send. A map from user ID, to a map from device ID to message body.
-     * The device ID may also be *, meaning all known devices for the user.
-     */
-    var messages: Map<String, Map<String, Any>>? = null
-}
+internal data class SendToDeviceBody(
+        /**
+         * `Any` should implement [SendToDeviceObject], but we cannot use interface here because of Json serialization
+         *
+         * The messages to send. A map from user ID, to a map from device ID to message body.
+         * The device ID may also be *, meaning all known devices for the user.
+         */
+        val messages: Map<String, Map<String, Any>>?
+)
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt
index d8186ad2cb..ef459fbc59 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt
@@ -24,8 +24,7 @@ import com.squareup.moshi.JsonClass
  * Upload Signature response
  */
 @JsonClass(generateAdapter = true)
-data class SignatureUploadResponse(
-
+internal data class SignatureUploadResponse(
         /**
          * The response contains a failures property, which is a map of user ID to device ID to failure reason,
          * if any of the uploaded keys failed.
@@ -33,7 +32,7 @@ data class SignatureUploadResponse(
          * If a signature is not valid, the homeserver should set the corresponding entry in failures to a JSON object
          * with the errcode property set to M_INVALID_SIGNATURE.
          */
-        var failures: Map<String, Map<String, @JvmSuppressWildcards Any>>? = null
+        val failures: Map<String, Map<String, @JvmSuppressWildcards Any>>? = null
 
 )
 
@@ -41,8 +40,10 @@ data class SignatureUploadResponse(
 data class UploadResponseFailure(
         @Json(name = "status")
         val status: Int,
+
         @Json(name = "errCode")
         val errCode: String,
+
         @Json(name = "message")
         val message: String
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt
index 161c5d0354..f2ea24a960 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt
@@ -20,12 +20,10 @@ import com.squareup.moshi.Json
 import com.squareup.moshi.JsonClass
 
 @JsonClass(generateAdapter = true)
-data class UpdateDeviceInfoBody(
-
+internal data class UpdateDeviceInfoBody(
         /**
          * The new display name for this device. If not given, the display name is unchanged.
          */
         @Json(name = "display_name")
         var displayName: String? = null
-
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt
index f4e71c7dca..05d2d88f95 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt
@@ -22,9 +22,9 @@ import im.vector.matrix.android.internal.crypto.model.toRest
 /**
  * Helper class to build CryptoApi#uploadSignatures params
  */
-data class UploadSignatureQueryBuilder(
-        private val deviceInfoList: ArrayList<CryptoDeviceInfo> = ArrayList(),
-        private val signingKeyInfoList: ArrayList<CryptoCrossSigningKey> = ArrayList()
+internal data class UploadSignatureQueryBuilder(
+        private val deviceInfoList: MutableList<CryptoDeviceInfo> = mutableListOf(),
+        private val signingKeyInfoList: MutableList<CryptoCrossSigningKey> = mutableListOf()
 ) {
 
     fun withDeviceInfo(deviceInfo: CryptoDeviceInfo) = apply {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt
index 0945de030a..45ad43a0ef 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt
@@ -28,15 +28,15 @@ data class UserPasswordAuth(
 
         // device device session id
         @Json(name = "session")
-        var session: String? = null,
+        val session: String? = null,
 
         // registration information
         @Json(name = "type")
-        var type: String? = LoginFlowTypes.PASSWORD,
+        val type: String? = LoginFlowTypes.PASSWORD,
 
         @Json(name = "user")
-        var user: String? = null,
+        val user: String? = null,
 
         @Json(name = "password")
-        var password: String? = null
+        val password: String? = null
 )
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt
index dceb77ddd9..98f931a455 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt
@@ -35,8 +35,7 @@ internal open class DeviceInfoEntity(@PrimaryKey var primaryKey: String = "",
                                      var signatureMapJson: String? = null,
                                      var unsignedMapJson: String? = null,
                                      var trustLevelEntity: TrustLevelEntity? = null
-                                     )
-    : RealmObject() {
+) : RealmObject() {
 
 //    // Deserialize data
 //    fun getDeviceInfo(): MXDeviceInfo? {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt
index c35282b392..e2c0242193 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2020 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package im.vector.matrix.android.internal.crypto.store.db.model
 
 import io.realm.RealmObject
@@ -9,5 +25,5 @@ internal open class TrustLevelEntity(
 
     companion object
 
-    fun isVerified() : Boolean = crossSignedVerified == true || locallyVerified == true
+    fun isVerified(): Boolean = crossSignedVerified == true || locallyVerified == true
 }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt
index 4ebdac2635..940fa9c7fb 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt
@@ -18,8 +18,8 @@ package im.vector.matrix.android.internal.crypto.tasks
 
 import im.vector.matrix.android.internal.auth.data.LoginFlowTypes
 import im.vector.matrix.android.internal.crypto.api.CryptoApi
-import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
 import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceParams
+import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
 import im.vector.matrix.android.internal.di.UserId
 import im.vector.matrix.android.internal.network.executeRequest
 import im.vector.matrix.android.internal.task.Task
@@ -42,16 +42,16 @@ internal class DefaultDeleteDeviceWithUserPasswordTask @Inject constructor(
 
     override suspend fun execute(params: DeleteDeviceWithUserPasswordTask.Params) {
         return executeRequest(eventBus) {
-            apiCall = cryptoApi.deleteDevice(params.deviceId, DeleteDeviceParams()
-                    .apply {
-                        userPasswordAuth = UserPasswordAuth()
-                                .apply {
-                                    type = LoginFlowTypes.PASSWORD
-                                    session = params.authSession
-                                    user = userId
+            apiCall = cryptoApi.deleteDevice(params.deviceId,
+                    DeleteDeviceParams(
+                            userPasswordAuth = UserPasswordAuth(
+                                    type = LoginFlowTypes.PASSWORD,
+                                    session = params.authSession,
+                                    user = userId,
                                     password = params.password
-                                }
-                    })
+                            )
+                    )
+            )
         }
     }
 }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt
index c9a8addd2a..5a8f8e7ba5 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt
@@ -35,7 +35,7 @@ import javax.inject.Inject
 internal interface RoomVerificationUpdateTask : Task<RoomVerificationUpdateTask.Params, Unit> {
     data class Params(
             val events: List<Event>,
-            val sasVerificationService: DefaultVerificationService,
+            val verificationService: DefaultVerificationService,
             val cryptoService: CryptoService
     )
 }
@@ -104,7 +104,7 @@ internal class DefaultRoomVerificationUpdateTask @Inject constructor(
                             // The verification is started from another device
                             Timber.v("## SAS Verification live observer: Transaction started by other device  tid:${it.transactionID} ")
                             it.transactionID?.let { txId -> transactionsHandledByOtherDevice.add(txId) }
-                            params.sasVerificationService.onRoomRequestHandledByOtherDevice(event)
+                            params.verificationService.onRoomRequestHandledByOtherDevice(event)
                         }
                     }
                 } else if (EventType.KEY_VERIFICATION_READY == event.type) {
@@ -113,13 +113,13 @@ internal class DefaultRoomVerificationUpdateTask @Inject constructor(
                             // The verification is started from another device
                             Timber.v("## SAS Verification live observer: Transaction started by other device  tid:${it.transactionID} ")
                             it.transactionID?.let { txId -> transactionsHandledByOtherDevice.add(txId) }
-                            params.sasVerificationService.onRoomRequestHandledByOtherDevice(event)
+                            params.verificationService.onRoomRequestHandledByOtherDevice(event)
                         }
                     }
                 } else if (EventType.KEY_VERIFICATION_CANCEL == event.type || EventType.KEY_VERIFICATION_DONE == event.type) {
                     event.getClearContent().toModel<MessageRelationContent>()?.relatesTo?.eventId?.let {
                         transactionsHandledByOtherDevice.remove(it)
-                        params.sasVerificationService.onRoomRequestHandledByOtherDevice(event)
+                        params.verificationService.onRoomRequestHandledByOtherDevice(event)
                     }
                 }
 
@@ -141,11 +141,11 @@ internal class DefaultRoomVerificationUpdateTask @Inject constructor(
                 EventType.KEY_VERIFICATION_CANCEL,
                 EventType.KEY_VERIFICATION_READY,
                 EventType.KEY_VERIFICATION_DONE -> {
-                    params.sasVerificationService.onRoomEvent(event)
+                    params.verificationService.onRoomEvent(event)
                 }
                 EventType.MESSAGE -> {
                     if (MessageType.MSGTYPE_VERIFICATION_REQUEST == event.getClearContent().toModel<MessageContent>()?.type) {
-                        params.sasVerificationService.onRoomRequestReceived(event)
+                        params.verificationService.onRoomRequestReceived(event)
                     }
                 }
             }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt
index 2b4ab74f87..58c461888b 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt
@@ -42,8 +42,9 @@ internal class DefaultSendToDeviceTask @Inject constructor(
 ) : SendToDeviceTask {
 
     override suspend fun execute(params: SendToDeviceTask.Params) {
-        val sendToDeviceBody = SendToDeviceBody()
-        sendToDeviceBody.messages = params.contentMap.map
+        val sendToDeviceBody = SendToDeviceBody(
+                messages = params.contentMap.map
+        )
 
         return executeRequest(eventBus) {
             apiCall = cryptoApi.sendToDevice(
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt
index 4ea60a7bad..af097f4431 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt
@@ -45,15 +45,10 @@ internal class DefaultUploadKeysTask @Inject constructor(
     override suspend fun execute(params: UploadKeysTask.Params): KeysUploadResponse {
         val encodedDeviceId = convertToUTF8(params.deviceId)
 
-        val body = KeysUploadBody()
-
-        if (null != params.deviceKeys) {
-            body.deviceKeys = params.deviceKeys
-        }
-
-        if (null != params.oneTimeKeys) {
-            body.oneTimeKeys = params.oneTimeKeys
-        }
+        val body = KeysUploadBody(
+                deviceKeys = params.deviceKeys,
+                oneTimeKeys = params.oneTimeKeys
+        )
 
         return executeRequest(eventBus) {
             apiCall = if (encodedDeviceId.isBlank()) {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt
index 47eceb179b..2b049e0061 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt
@@ -30,7 +30,8 @@ import im.vector.matrix.android.internal.worker.getSessionComponent
 import timber.log.Timber
 import javax.inject.Inject
 
-internal class SendVerificationMessageWorker constructor(context: Context, params: WorkerParameters)
+internal class SendVerificationMessageWorker(context: Context,
+                                             params: WorkerParameters)
     : CoroutineWorker(context, params) {
 
     @JsonClass(generateAdapter = true)
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt
index 5a4838831c..ed2e5dfbe0 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt
@@ -21,6 +21,15 @@ import im.vector.matrix.android.internal.crypto.model.rest.SendToDeviceObject
 interface VerificationInfo {
     fun toEventContent(): Content? = null
     fun toSendToDeviceObject(): SendToDeviceObject? = null
-    fun isValid() : Boolean
+    fun isValid(): Boolean
+
+    /**
+     * String to identify the transaction.
+     * This string must be unique for the pair of users performing verification for the duration that the transaction is valid.
+     * Alice’s device should record this ID and use it in future messages in this transaction.
+     */
     val transactionID: String?
+
+    // TODO Refacto Put the relatesTo here or at least in Message sent in Room parent?
+    // val relatesTo: RelationDefaultContent?
 }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt
index 2774a44d49..cc6c8c8530 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt
@@ -16,9 +16,6 @@
 package im.vector.matrix.android.internal.crypto.verification
 
 internal interface VerificationInfoAccept : VerificationInfo {
-
-    override val transactionID: String?
-
     /**
      * The key agreement protocol that Bob’s device has selected to use, out of the list proposed by Alice’s device
      */
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt
index b9bd2cebee..713453e93e 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt
@@ -16,8 +16,6 @@
 package im.vector.matrix.android.internal.crypto.verification
 
 internal interface VerificationInfoCancel : VerificationInfo {
-
-    override val transactionID: String?
     /**
      * machine-readable reason for cancelling, see [CancelCode]
      */
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt
index 99edb53e79..2466660ca4 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt
@@ -19,8 +19,6 @@ package im.vector.matrix.android.internal.crypto.verification
  * Sent by both devices to send their ephemeral Curve25519 public key to the other device.
  */
 internal interface VerificationInfoKey : VerificationInfo {
-
-    override val transactionID: String?
     /**
      * The device’s ephemeral public key, as an unpadded base64 string
      */
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt
index ace1210986..e895973ae8 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt
@@ -16,9 +16,6 @@
 package im.vector.matrix.android.internal.crypto.verification
 
 internal interface VerificationInfoMac : VerificationInfo {
-
-    override val transactionID: String?
-
     /**
      * A map of key ID to the MAC of the key, as an unpadded base64 string, calculated using the MAC key
      */
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt
index 0c5312987e..4c26951315 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt
@@ -22,10 +22,8 @@ package im.vector.matrix.android.internal.crypto.verification
  * The m.key.verification.ready event is optional; the recipient of the m.key.verification.request event may respond directly
  * with a m.key.verification.start event instead.
  */
+
 interface VerificationInfoReady : VerificationInfo {
-
-    override val transactionID: String?
-
     /**
      * The ID of the device that sent the m.key.verification.ready message
      */
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt
index 4875705580..3f3e4f27a6 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt
@@ -24,13 +24,6 @@ internal interface VerificationInfoStart : VerificationInfo {
      */
     val fromDevice: String?
 
-    /**
-     * String to identify the transaction.
-     * This string must be unique for the pair of users performing verification for the duration that the transaction is valid.
-     * Alice’s device should record this ID and use it in future messages in this transaction.
-     */
-    override val transactionID: String?
-
     /**
      * An array of key agreement protocols that Alice’s client understands.
      * Must include “curve25519”.
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt
index c6a6581384..bbac973f1d 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt
@@ -37,7 +37,7 @@ internal class VerificationMessageLiveObserver @Inject constructor(
         @SessionDatabase realmConfiguration: RealmConfiguration,
         private val roomVerificationUpdateTask: DefaultRoomVerificationUpdateTask,
         private val cryptoService: CryptoService,
-        private val sasVerificationService: DefaultVerificationService,
+        private val verificationService: DefaultVerificationService,
         private val taskExecutor: TaskExecutor
 ) : RealmLiveEntityObserver<EventEntity>(realmConfiguration) {
 
@@ -67,7 +67,7 @@ internal class VerificationMessageLiveObserver @Inject constructor(
                 .toList()
 
         roomVerificationUpdateTask.configureWith(
-                RoomVerificationUpdateTask.Params(events, sasVerificationService, cryptoService)
+                RoomVerificationUpdateTask.Params(events, verificationService, cryptoService)
         ).executeBy(taskExecutor)
     }
 }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt
index 627a444c6d..3d038a0c82 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt
@@ -32,7 +32,8 @@ import im.vector.matrix.android.internal.worker.getSessionComponent
 import org.greenrobot.eventbus.EventBus
 import javax.inject.Inject
 
-internal class SendEventWorker constructor(context: Context, params: WorkerParameters)
+internal class SendEventWorker(context: Context,
+                               params: WorkerParameters)
     : CoroutineWorker(context, params) {
 
     @JsonClass(generateAdapter = true)
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt
index 285673a1f1..bda3623078 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt
@@ -32,7 +32,7 @@ import timber.log.Timber
 import javax.inject.Inject
 
 internal class CryptoSyncHandler @Inject constructor(private val cryptoService: DefaultCryptoService,
-                                                     private val sasVerificationService: DefaultVerificationService) {
+                                                     private val verificationService: DefaultVerificationService) {
 
     fun handleToDevice(toDevice: ToDeviceSyncResponse, initialSyncProgressService: DefaultInitialSyncProgressService? = null) {
         val total = toDevice.events?.size ?: 0
@@ -44,7 +44,7 @@ internal class CryptoSyncHandler @Inject constructor(private val cryptoService:
                     && event.getClearContent()?.toModel<MessageContent>()?.type == "m.bad.encrypted") {
                 Timber.e("## handleToDeviceEvent() : Warning: Unable to decrypt to-device event : ${event.content}")
             } else {
-                sasVerificationService.onToDeviceEvent(event)
+                verificationService.onToDeviceEvent(event)
                 cryptoService.onToDeviceEvent(event)
             }
         }
diff --git a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt
index 168855b201..0c2f8cdee6 100644
--- a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt
+++ b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt
@@ -90,7 +90,7 @@ class CrossSigningSettingsFragment @Inject constructor(
         super.onDestroyView()
     }
 
-    fun requestPassword(sessionId: String) {
+    private fun requestPassword(sessionId: String) {
         // Ask for password
         val inflater = this.layoutInflater
         val layout = inflater.inflate(R.layout.dialog_base_edit_text, null)
@@ -105,6 +105,7 @@ class CrossSigningSettingsFragment @Inject constructor(
                 .setPositiveButton(R.string.ok) { _, _ ->
                     val pass = input.text.toString()
 
+                    // TODO sessionId should never get out the ViewModel
                     viewModel.handle(CrossSigningAction.InitializeCrossSigning(UserPasswordAuth(
                             session = sessionId,
                             password = pass
diff --git a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt
index cba86da599..e95bf50de9 100644
--- a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt
+++ b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt
@@ -89,7 +89,7 @@ class CrossSigningSettingsViewModel @AssistedInject constructor(@Assisted privat
     override fun handle(action: CrossSigningAction) {
         when (action) {
             is CrossSigningAction.InitializeCrossSigning -> {
-                initializeCrossSigning(action.auth?.also { it.user = session.myUserId })
+                initializeCrossSigning(action.auth?.copy(user = session.myUserId))
             }
         }
     }
diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml
index a05bc3511d..578038c0af 100644
--- a/vector/src/main/res/values/strings.xml
+++ b/vector/src/main/res/values/strings.xml
@@ -1500,7 +1500,7 @@ Why choose Riot.im?
 
     <string name="sas_verified">Verified!</string>
     <string name="sas_verified_successful">You\'ve successfully verified this device.</string>
-    <string name="sas_verified_successful_description">Messages with this user in this room are end-to-end encrypted and can‘t be read by third parties.</string>
+    <string name="sas_verified_successful_description">Messages with this user in this room are end-to-end encrypted and can\'t be read by third parties.</string>
     <string name="sas_got_it">Got it</string>
 
     <string name="sas_verifying_keys">Nothing appearing? Not all clients supports interactive verification yet. Use legacy verification.</string>
@@ -1694,7 +1694,6 @@ Not all features in Riot are implemented in RiotX yet. Main missing (and coming
     <string name="room_directory_search_hint">Name or ID (#example:matrix.org)</string>
 
     <string name="labs_swipe_to_reply_in_timeline">Enable swipe to reply in timeline</string>
-    <string name="labs_enable_verification_other_dm">Enable verification other DM</string>
 
     <string name="link_copied_to_clipboard">Link copied to clipboard</string>