Skip to content

Commit b63e3d6

Browse files
committed
added prepare and tests
1 parent 1db5c66 commit b63e3d6

File tree

13 files changed

+245
-100
lines changed

13 files changed

+245
-100
lines changed

matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTest.kt

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP
3333
import org.matrix.android.sdk.api.listeners.ProgressListener
3434
import org.matrix.android.sdk.api.listeners.StepProgressListener
3535
import org.matrix.android.sdk.api.session.crypto.crosssigning.DeviceTrustLevel
36+
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeyBackupConfig
3637
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupLastVersionResult
3738
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
3839
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
@@ -46,9 +47,12 @@ import org.matrix.android.sdk.api.session.crypto.keysbackup.extractCurveKeyFromR
4647
import org.matrix.android.sdk.api.session.crypto.keysbackup.toKeysVersionResult
4748
import org.matrix.android.sdk.api.session.crypto.model.ImportRoomKeysResult
4849
import org.matrix.android.sdk.api.session.getRoom
50+
import org.matrix.android.sdk.common.CommonTestHelper
4951
import org.matrix.android.sdk.common.CommonTestHelper.Companion.runCryptoTest
5052
import org.matrix.android.sdk.common.CommonTestHelper.Companion.runSessionTest
53+
import org.matrix.android.sdk.common.CryptoTestHelper
5154
import org.matrix.android.sdk.common.RetryTestRule
55+
import org.matrix.android.sdk.common.SessionTestParams
5256
import org.matrix.android.sdk.common.TestConstants
5357
import org.matrix.android.sdk.common.waitFor
5458
import org.matrix.android.sdk.internal.crypto.keysbackup.algorithm.KeysBackupAlgorithmFactory
@@ -63,10 +67,21 @@ import kotlin.coroutines.resume
6367
@RunWith(AndroidJUnit4::class)
6468
@FixMethodOrder(MethodSorters.JVM)
6569
@LargeTest
66-
class KeysBackupTest : InstrumentedTest {
70+
open class KeysBackupTest : InstrumentedTest {
6771

6872
@get:Rule val rule = RetryTestRule(3)
6973

74+
@Test
75+
fun default_config_should_be_assymetric_only() = runSessionTest(context()) { testHelper ->
76+
val session = testHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true))
77+
78+
val defaultConfig = session.cryptoService().keysBackupService().keyBackupConfig
79+
80+
assertEquals(MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP, defaultConfig.defaultAlgorithm)
81+
assertEquals(1, defaultConfig.supportedAlgorithms.size)
82+
assertTrue(defaultConfig.supportedAlgorithms.contains(MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP))
83+
}
84+
7085
/**
7186
* - From doE2ETestWithAliceAndBobInARoomWithEncryptedMessages, we should have no backed up keys
7287
* - Check backup keys after having marked one as backed up
@@ -207,7 +222,7 @@ class KeysBackupTest : InstrumentedTest {
207222
*/
208223
@Test
209224
fun backupAfterCreateKeysBackupVersionTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
210-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
225+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
211226

212227
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
213228

@@ -248,7 +263,7 @@ class KeysBackupTest : InstrumentedTest {
248263
*/
249264
@Test
250265
fun backupAllGroupSessionsTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
251-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
266+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
252267

253268
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
254269

@@ -293,7 +308,7 @@ class KeysBackupTest : InstrumentedTest {
293308
*/
294309
@Test
295310
fun testEncryptAndDecryptKeysBackupData() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
296-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
311+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
297312

298313
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
299314

@@ -342,7 +357,7 @@ class KeysBackupTest : InstrumentedTest {
342357
*/
343358
@Test
344359
fun restoreKeysBackupTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
345-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
360+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
346361

347362
val testData = keysBackupTestHelper.createKeysBackupScenarioWithPassword(null)
348363

@@ -428,7 +443,7 @@ class KeysBackupTest : InstrumentedTest {
428443
*/
429444
@Test
430445
fun trustKeyBackupVersionTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
431-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
446+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
432447

433448
// - Do an e2e backup to the homeserver with a recovery key
434449
// - And log Alice on a new device
@@ -488,7 +503,7 @@ class KeysBackupTest : InstrumentedTest {
488503
*/
489504
@Test
490505
fun trustKeyBackupVersionWithRecoveryKeyTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
491-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
506+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
492507

493508
// - Do an e2e backup to the homeserver with a recovery key
494509
// - And log Alice on a new device
@@ -546,7 +561,7 @@ class KeysBackupTest : InstrumentedTest {
546561
*/
547562
@Test
548563
fun trustKeyBackupVersionWithWrongRecoveryKeyTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
549-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
564+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
550565

551566
// - Do an e2e backup to the homeserver with a recovery key
552567
// - And log Alice on a new device
@@ -588,7 +603,7 @@ class KeysBackupTest : InstrumentedTest {
588603
*/
589604
@Test
590605
fun trustKeyBackupVersionWithPasswordTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
591-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
606+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
592607

593608
val password = "Password"
594609

@@ -648,7 +663,7 @@ class KeysBackupTest : InstrumentedTest {
648663
*/
649664
@Test
650665
fun trustKeyBackupVersionWithWrongPasswordTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
651-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
666+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
652667

653668
val password = "Password"
654669
val badPassword = "Bad Password"
@@ -689,7 +704,7 @@ class KeysBackupTest : InstrumentedTest {
689704
*/
690705
@Test
691706
fun restoreKeysBackupWithAWrongRecoveryKeyTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
692-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
707+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
693708

694709
val testData = keysBackupTestHelper.createKeysBackupScenarioWithPassword(null)
695710
val keysBackupService = testData.aliceSession2.cryptoService().keysBackupService()
@@ -717,7 +732,7 @@ class KeysBackupTest : InstrumentedTest {
717732
*/
718733
@Test
719734
fun testBackupWithPassword() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
720-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
735+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
721736

722737
val password = "password"
723738

@@ -773,7 +788,7 @@ class KeysBackupTest : InstrumentedTest {
773788
*/
774789
@Test
775790
fun restoreKeysBackupWithAWrongPasswordTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
776-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
791+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
777792

778793
val password = "password"
779794
val wrongPassword = "passw0rd"
@@ -804,7 +819,7 @@ class KeysBackupTest : InstrumentedTest {
804819
*/
805820
@Test
806821
fun testUseRecoveryKeyToRestoreAPasswordBasedKeysBackup() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
807-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
822+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
808823

809824
val password = "password"
810825

@@ -833,7 +848,7 @@ class KeysBackupTest : InstrumentedTest {
833848
*/
834849
@Test
835850
fun testUsePasswordToRestoreARecoveryKeyBasedKeysBackup() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
836-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
851+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
837852

838853
val testData = keysBackupTestHelper.createKeysBackupScenarioWithPassword(null)
839854
val keysBackupService = testData.aliceSession2.cryptoService().keysBackupService()
@@ -859,7 +874,7 @@ class KeysBackupTest : InstrumentedTest {
859874
*/
860875
@Test
861876
fun testIsKeysBackupTrusted() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
862-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
877+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
863878

864879
// - Create a backup version
865880
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -904,7 +919,7 @@ class KeysBackupTest : InstrumentedTest {
904919
*/
905920
@Test
906921
fun testBackupWhenAnotherBackupWasCreated() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
907-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
922+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
908923

909924
// - Create a backup version
910925
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -979,7 +994,7 @@ class KeysBackupTest : InstrumentedTest {
979994
*/
980995
@Test
981996
fun testBackupAfterVerifyingADevice() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
982-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
997+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
983998

984999
// - Create a backup version
9851000
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -1066,7 +1081,7 @@ class KeysBackupTest : InstrumentedTest {
10661081
*/
10671082
@Test
10681083
fun deleteKeysBackupTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
1069-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
1084+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
10701085

10711086
// - Create a backup version
10721087
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -1089,4 +1104,9 @@ class KeysBackupTest : InstrumentedTest {
10891104

10901105
stateObserver.stopAndCheckStates(null)
10911106
}
1107+
1108+
open var keyBackupConfig: KeyBackupConfig? = null
1109+
1110+
private fun createKeysBackupTestHelper(testHelper: CommonTestHelper, cryptoTestHelper: CryptoTestHelper) =
1111+
KeysBackupTestHelper(testHelper, cryptoTestHelper, keyBackupConfig)
10921112
}

matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestHelper.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import kotlinx.coroutines.suspendCancellableCoroutine
2020
import org.junit.Assert
2121
import org.matrix.android.sdk.api.listeners.ProgressListener
2222
import org.matrix.android.sdk.api.session.Session
23+
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeyBackupConfig
2324
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
2425
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
2526
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
@@ -34,7 +35,8 @@ import kotlin.coroutines.resume
3435

3536
internal class KeysBackupTestHelper(
3637
private val testHelper: CommonTestHelper,
37-
private val cryptoTestHelper: CryptoTestHelper
38+
private val cryptoTestHelper: CryptoTestHelper,
39+
private val keyBackupConfig: KeyBackupConfig? = null
3840
) {
3941

4042
fun waitForKeybackUpBatching() {
@@ -55,6 +57,9 @@ internal class KeysBackupTestHelper(
5557

5658
val cryptoStore = (cryptoTestData.firstSession.cryptoService().keysBackupService() as DefaultKeysBackupService).store
5759
val keysBackup = cryptoTestData.firstSession.cryptoService().keysBackupService()
60+
if (keyBackupConfig != null) {
61+
keysBackup.keyBackupConfig = keyBackupConfig
62+
}
5863

5964
val stateObserver = StateObserver(keysBackup)
6065

@@ -81,7 +86,10 @@ internal class KeysBackupTestHelper(
8186

8287
// - Log Alice on a new device
8388
val aliceSession2 = testHelper.logIntoAccount(aliceUserId, KeysBackupTestConstants.defaultSessionParamsWithInitialSync)
84-
89+
if (keyBackupConfig != null) {
90+
aliceSession2.cryptoService().keysBackupService().keyBackupConfig = keyBackupConfig
91+
}
92+
aliceSession2.cryptoService().keysBackupService().checkAndStartKeysBackup()
8593
// Test check: aliceSession2 has no keys at login
8694
Assert.assertEquals(0, aliceSession2.cryptoService().inboundGroupSessionsCount(false))
8795

@@ -116,6 +124,7 @@ internal class KeysBackupTestHelper(
116124
val keysVersion = testHelper.waitForCallback<KeysVersion> {
117125
keysBackup.createKeysBackupVersion(megolmBackupCreationInfo, it)
118126
}
127+
keysBackup.saveBackupRecoveryKey(megolmBackupCreationInfo.recoveryKey, version = keysVersion.version)
119128

120129
Assert.assertNotNull("Key backup version should not be null", keysVersion.version)
121130

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (c) 2022 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.matrix.android.sdk.internal.crypto.keysbackup
18+
19+
import androidx.test.filters.LargeTest
20+
import org.junit.FixMethodOrder
21+
import org.junit.runners.MethodSorters
22+
import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_AES_256_BACKUP
23+
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeyBackupConfig
24+
25+
@FixMethodOrder(MethodSorters.JVM)
26+
@LargeTest
27+
class SymmetricKeysBackupTest : KeysBackupTest() {
28+
29+
override var keyBackupConfig: KeyBackupConfig? = KeyBackupConfig(
30+
defaultAlgorithm = MXCRYPTO_ALGORITHM_AES_256_BACKUP,
31+
supportedAlgorithms = listOf(MXCRYPTO_ALGORITHM_AES_256_BACKUP)
32+
)
33+
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/CryptoConstants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const val MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP = "m.megolm_backup.v1.curve25519
3333

3434
/**
3535
* Matrix algorithm value for AES-256 megolm keys backup.
36+
* Symmetric megolm backup
3637
*/
3738
const val MXCRYPTO_ALGORITHM_AES_256_BACKUP = "org.matrix.msc3270.v1.aes-hmac-sha2"
3839

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (c) 2022 The Matrix.org Foundation C.I.C.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.matrix.android.sdk.api.session.crypto.keysbackup
18+
19+
import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP
20+
21+
data class KeyBackupConfig(
22+
val defaultAlgorithm: String = MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP,
23+
val supportedAlgorithms: List<String> = listOf(MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP)
24+
) {
25+
fun isAlgorithmSupported(alg: String) = supportedAlgorithms.contains(alg)
26+
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ import org.matrix.android.sdk.api.listeners.StepProgressListener
2222
import org.matrix.android.sdk.api.session.crypto.model.ImportRoomKeysResult
2323

2424
interface KeysBackupService {
25+
26+
/**
27+
* Define the backup internal configuration, supported algorithm, default algorithm.
28+
* @param keyBackupConfig the config
29+
*/
30+
var keyBackupConfig: KeyBackupConfig
31+
2532
/**
2633
* Retrieve the current version of the backup from the homeserver.
2734
*

0 commit comments

Comments
 (0)