mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Merge branch '1696-keystore-crash' into 'master'
Show a dialog instead of crashing if a hardware-backed key can't be loaded Closes #1696 See merge request briar/briar!1233
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
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.IdentityManager;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
@@ -52,17 +53,19 @@ public interface AccountManager {
|
||||
* Loads the encrypted database key from disk and decrypts it with the
|
||||
* given password.
|
||||
*
|
||||
* @return true if the database key was successfully loaded and decrypted.
|
||||
* @throws DecryptionException If the database key could not be loaded and
|
||||
* decrypted.
|
||||
*/
|
||||
boolean signIn(String password);
|
||||
void signIn(String password) throws DecryptionException;
|
||||
|
||||
/**
|
||||
* Loads the encrypted database key from disk, decrypts it with the old
|
||||
* password, encrypts it with the new password, and stores it on disk,
|
||||
* replacing the old key.
|
||||
*
|
||||
* @return true if the database key was successfully loaded, re-encrypted
|
||||
* and stored.
|
||||
* @throws DecryptionException If the database key could not be loaded and
|
||||
* decrypted.
|
||||
*/
|
||||
boolean changePassword(String oldPassword, String newPassword);
|
||||
void changePassword(String oldPassword, String newPassword)
|
||||
throws DecryptionException;
|
||||
}
|
||||
|
||||
@@ -142,16 +142,17 @@ public interface CryptoComponent {
|
||||
/**
|
||||
* Decrypts and authenticates the given ciphertext that has been read from
|
||||
* storage. The encryption and authentication keys are derived from the
|
||||
* given password. Returns null if the ciphertext cannot be decrypted and
|
||||
* authenticated (for example, if the password is wrong).
|
||||
* given password.
|
||||
*
|
||||
* @param keyStrengthener Used to strengthen the password-based key. If
|
||||
* null, or if strengthening was not used when encrypting the ciphertext,
|
||||
* the password-based key will not be strengthened
|
||||
* @throws DecryptionException If the ciphertext cannot be decrypted and
|
||||
* authenticated (for example, if the password is wrong).
|
||||
*/
|
||||
@Nullable
|
||||
byte[] decryptWithPassword(byte[] ciphertext, String password,
|
||||
@Nullable KeyStrengthener keyStrengthener);
|
||||
@Nullable KeyStrengthener keyStrengthener)
|
||||
throws DecryptionException;
|
||||
|
||||
/**
|
||||
* Returns true if the given ciphertext was encrypted using a strengthened
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.briarproject.bramble.api.crypto;
|
||||
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
|
||||
@NotNullByDefault
|
||||
public class DecryptionException extends Exception {
|
||||
|
||||
private final DecryptionResult result;
|
||||
|
||||
public DecryptionException(DecryptionResult result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public DecryptionResult getDecryptionResult() {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.briarproject.bramble.api.crypto;
|
||||
|
||||
/**
|
||||
* The result of a password-based decryption operation.
|
||||
*/
|
||||
public enum DecryptionResult {
|
||||
|
||||
/**
|
||||
* Decryption succeeded.
|
||||
*/
|
||||
SUCCESS,
|
||||
|
||||
/**
|
||||
* Decryption failed because the format of the ciphertext was invalid.
|
||||
*/
|
||||
INVALID_CIPHERTEXT,
|
||||
|
||||
/**
|
||||
* Decryption failed because the {@link KeyStrengthener} used for
|
||||
* encryption was not available for decryption.
|
||||
*/
|
||||
KEY_STRENGTHENER_ERROR,
|
||||
|
||||
/**
|
||||
* Decryption failed because the password used for decryption did not match
|
||||
* the password used for encryption.
|
||||
*/
|
||||
INVALID_PASSWORD
|
||||
}
|
||||
Reference in New Issue
Block a user