Skip to content

Commit ecd6d5b

Browse files
committed
added prepare and tests
1 parent 0464e82 commit ecd6d5b

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.TestMatrixCallback
5458
import org.matrix.android.sdk.internal.crypto.keysbackup.algorithm.KeysBackupAlgorithmFactory
@@ -61,10 +65,21 @@ import java.util.concurrent.CountDownLatch
6165
@RunWith(AndroidJUnit4::class)
6266
@FixMethodOrder(MethodSorters.JVM)
6367
@LargeTest
64-
class KeysBackupTest : InstrumentedTest {
68+
open class KeysBackupTest : InstrumentedTest {
6569

6670
@get:Rule val rule = RetryTestRule(3)
6771

72+
@Test
73+
fun default_config_should_be_assymetric_only() = runSessionTest(context()) { testHelper ->
74+
val session = testHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true))
75+
76+
val defaultConfig = session.cryptoService().keysBackupService().keyBackupConfig
77+
78+
assertEquals(MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP, defaultConfig.defaultAlgorithm)
79+
assertEquals(1, defaultConfig.supportedAlgorithms.size)
80+
assertTrue(defaultConfig.supportedAlgorithms.contains(MXCRYPTO_ALGORITHM_CURVE_25519_BACKUP))
81+
}
82+
6883
/**
6984
* - From doE2ETestWithAliceAndBobInARoomWithEncryptedMessages, we should have no backed up keys
7085
* - Check backup keys after having marked one as backed up
@@ -206,7 +221,7 @@ class KeysBackupTest : InstrumentedTest {
206221
*/
207222
@Test
208223
fun backupAfterCreateKeysBackupVersionTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
209-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
224+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
210225

211226
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
212227

@@ -247,7 +262,7 @@ class KeysBackupTest : InstrumentedTest {
247262
*/
248263
@Test
249264
fun backupAllGroupSessionsTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
250-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
265+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
251266

252267
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
253268

@@ -292,7 +307,7 @@ class KeysBackupTest : InstrumentedTest {
292307
*/
293308
@Test
294309
fun testEncryptAndDecryptKeysBackupData() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
295-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
310+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
296311

297312
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
298313

@@ -341,7 +356,7 @@ class KeysBackupTest : InstrumentedTest {
341356
*/
342357
@Test
343358
fun restoreKeysBackupTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
344-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
359+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
345360

346361
val testData = keysBackupTestHelper.createKeysBackupScenarioWithPassword(null)
347362

@@ -427,7 +442,7 @@ class KeysBackupTest : InstrumentedTest {
427442
*/
428443
@Test
429444
fun trustKeyBackupVersionTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
430-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
445+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
431446

432447
// - Do an e2e backup to the homeserver with a recovery key
433448
// - And log Alice on a new device
@@ -487,7 +502,7 @@ class KeysBackupTest : InstrumentedTest {
487502
*/
488503
@Test
489504
fun trustKeyBackupVersionWithRecoveryKeyTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
490-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
505+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
491506

492507
// - Do an e2e backup to the homeserver with a recovery key
493508
// - And log Alice on a new device
@@ -545,7 +560,7 @@ class KeysBackupTest : InstrumentedTest {
545560
*/
546561
@Test
547562
fun trustKeyBackupVersionWithWrongRecoveryKeyTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
548-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
563+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
549564

550565
// - Do an e2e backup to the homeserver with a recovery key
551566
// - And log Alice on a new device
@@ -587,7 +602,7 @@ class KeysBackupTest : InstrumentedTest {
587602
*/
588603
@Test
589604
fun trustKeyBackupVersionWithPasswordTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
590-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
605+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
591606

592607
val password = "Password"
593608

@@ -647,7 +662,7 @@ class KeysBackupTest : InstrumentedTest {
647662
*/
648663
@Test
649664
fun trustKeyBackupVersionWithWrongPasswordTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
650-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
665+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
651666

652667
val password = "Password"
653668
val badPassword = "Bad Password"
@@ -688,7 +703,7 @@ class KeysBackupTest : InstrumentedTest {
688703
*/
689704
@Test
690705
fun restoreKeysBackupWithAWrongRecoveryKeyTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
691-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
706+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
692707

693708
val testData = keysBackupTestHelper.createKeysBackupScenarioWithPassword(null)
694709

@@ -721,7 +736,7 @@ class KeysBackupTest : InstrumentedTest {
721736
*/
722737
@Test
723738
fun testBackupWithPassword() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
724-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
739+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
725740

726741
val password = "password"
727742

@@ -777,7 +792,7 @@ class KeysBackupTest : InstrumentedTest {
777792
*/
778793
@Test
779794
fun restoreKeysBackupWithAWrongPasswordTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
780-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
795+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
781796

782797
val password = "password"
783798
val wrongPassword = "passw0rd"
@@ -813,7 +828,7 @@ class KeysBackupTest : InstrumentedTest {
813828
*/
814829
@Test
815830
fun testUseRecoveryKeyToRestoreAPasswordBasedKeysBackup() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
816-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
831+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
817832

818833
val password = "password"
819834

@@ -842,7 +857,7 @@ class KeysBackupTest : InstrumentedTest {
842857
*/
843858
@Test
844859
fun testUsePasswordToRestoreARecoveryKeyBasedKeysBackup() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
845-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
860+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
846861

847862
val testData = keysBackupTestHelper.createKeysBackupScenarioWithPassword(null)
848863

@@ -873,7 +888,7 @@ class KeysBackupTest : InstrumentedTest {
873888
*/
874889
@Test
875890
fun testIsKeysBackupTrusted() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
876-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
891+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
877892

878893
// - Create a backup version
879894
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -918,7 +933,7 @@ class KeysBackupTest : InstrumentedTest {
918933
*/
919934
@Test
920935
fun testBackupWhenAnotherBackupWasCreated() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
921-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
936+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
922937

923938
// - Create a backup version
924939
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -990,7 +1005,7 @@ class KeysBackupTest : InstrumentedTest {
9901005
*/
9911006
@Test
9921007
fun testBackupAfterVerifyingADevice() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
993-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
1008+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
9941009

9951010
// - Create a backup version
9961011
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -1088,7 +1103,7 @@ class KeysBackupTest : InstrumentedTest {
10881103
*/
10891104
@Test
10901105
fun deleteKeysBackupTest() = runCryptoTest(context()) { cryptoTestHelper, testHelper ->
1091-
val keysBackupTestHelper = KeysBackupTestHelper(testHelper, cryptoTestHelper)
1106+
val keysBackupTestHelper = createKeysBackupTestHelper(testHelper, cryptoTestHelper)
10921107

10931108
// - Create a backup version
10941109
val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoomWithEncryptedMessages()
@@ -1111,4 +1126,9 @@ class KeysBackupTest : InstrumentedTest {
11111126

11121127
stateObserver.stopAndCheckStates(null)
11131128
}
1129+
1130+
open var keyBackupConfig: KeyBackupConfig? = null
1131+
1132+
private fun createKeysBackupTestHelper(testHelper: CommonTestHelper, cryptoTestHelper: CryptoTestHelper) =
1133+
KeysBackupTestHelper(testHelper, cryptoTestHelper, keyBackupConfig)
11141134
}

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
@@ -19,6 +19,7 @@ package org.matrix.android.sdk.internal.crypto.keysbackup
1919
import org.junit.Assert
2020
import org.matrix.android.sdk.api.listeners.ProgressListener
2121
import org.matrix.android.sdk.api.session.Session
22+
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeyBackupConfig
2223
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
2324
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
2425
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
@@ -33,7 +34,8 @@ import java.util.concurrent.CountDownLatch
3334

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

3941
fun waitForKeybackUpBatching() {
@@ -54,6 +56,9 @@ internal class KeysBackupTestHelper(
5456

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

5863
val stateObserver = StateObserver(keysBackup)
5964

@@ -80,7 +85,10 @@ internal class KeysBackupTestHelper(
8085

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

@@ -115,6 +123,7 @@ internal class KeysBackupTestHelper(
115123
val keysVersion = testHelper.doSync<KeysVersion> {
116124
keysBackup.createKeysBackupVersion(megolmBackupCreationInfo, it)
117125
}
126+
keysBackup.saveBackupRecoveryKey(megolmBackupCreationInfo.recoveryKey, version = keysVersion.version)
118127

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

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)