diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java index f33b44594..4acbee525 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java @@ -2,6 +2,7 @@ package org.briarproject.bramble.api.account; import org.briarproject.bramble.api.crypto.DecryptionException; import org.briarproject.bramble.api.crypto.SecretKey; +import org.briarproject.bramble.api.identity.Identity; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -43,6 +44,17 @@ public interface AccountManager { */ boolean createAccount(String name, String password); + /** + * Restores a given identity by registering it with the + * {@link IdentityManager}. Creates a database key, encrypts it with the + * given password and stores it on disk. {@link #accountExists()} will + * return true after this method returns true. + * @param identity + * @param password + * @return + */ + boolean restoreAccount(Identity identity, String password); + /** * Deletes all account state from disk. {@link #accountExists()} will * return false after this method returns. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java index 4636dfad3..1e1fa71c7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java @@ -176,6 +176,18 @@ class AccountManagerImpl implements AccountManager { } } + public boolean restoreAccount(Identity identity, String password) { + synchronized (stateChangeLock) { + if (hasDatabaseKey()) + throw new AssertionError("Already have a database key"); + identityManager.registerIdentity(identity); + SecretKey key = crypto.generateSecretKey(); + if (!encryptAndStoreDatabaseKey(key, password)) return false; + databaseKey = key; + return true; + } + } + @GuardedBy("stateChangeLock") private boolean encryptAndStoreDatabaseKey(SecretKey key, String password) { byte[] plaintext = key.getBytes(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java new file mode 100644 index 000000000..cd3aceb7f --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java @@ -0,0 +1,4 @@ +package org.briarproject.briar.android.socialbackup.recover; + +public class RestoreAccountActivity { +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java new file mode 100644 index 000000000..3f9f020af --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java @@ -0,0 +1,4 @@ +package org.briarproject.briar.android.socialbackup.recover; + +public class RestoreAccountViewModel { +}