From d8f76b33e9ea74eb567a115dd63559f6b27b2fce Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 25 Dec 2023 15:36:01 +0530 Subject: [PATCH] fix: check if passphrase is necessary before asking for it Updates #2836 --- .../app/passwordstore/data/crypto/CryptoRepository.kt | 4 ++++ .../app/passwordstore/ui/crypto/DecryptActivity.kt | 10 +++++++++- .../kotlin/app/passwordstore/crypto/CryptoHandler.kt | 6 ++++++ .../kotlin/app/passwordstore/crypto/PGPKeyManager.kt | 8 ++++++++ .../passwordstore/crypto/PGPainlessCryptoHandler.kt | 6 ++++++ 5 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt b/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt index 0ce4b3e3..be3f8da3 100644 --- a/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt +++ b/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt @@ -45,6 +45,10 @@ constructor( out: ByteArrayOutputStream, ) = withContext(dispatcherProvider.io()) { decryptPgp(password, identities, message, out) } + fun isPasswordProtected(message: ByteArrayInputStream): Boolean { + return pgpCryptoHandler.isPassphraseProtected(message) + } + suspend fun encrypt( identities: List, content: ByteArrayInputStream, diff --git a/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt b/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt index 9fb20af2..56ac1fc0 100644 --- a/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt +++ b/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt @@ -177,7 +177,7 @@ class DecryptActivity : BasePGPActivity() { } } - private fun askPassphrase( + private suspend fun askPassphrase( isError: Boolean, gpgIdentifiers: List, authResult: Result, @@ -187,6 +187,14 @@ class DecryptActivity : BasePGPActivity() { } else { finish() } + if ( + !repository.isPasswordProtected( + withContext(dispatcherProvider.io()) { File(fullPath).readBytes().inputStream() } + ) + ) { + decryptWithPassphrase(password = "", gpgIdentifiers = gpgIdentifiers) + return + } val dialog = PasswordDialog() if (isError) { dialog.setError() diff --git a/crypto/common/src/main/kotlin/app/passwordstore/crypto/CryptoHandler.kt b/crypto/common/src/main/kotlin/app/passwordstore/crypto/CryptoHandler.kt index 898cf058..20a4d1d9 100644 --- a/crypto/common/src/main/kotlin/app/passwordstore/crypto/CryptoHandler.kt +++ b/crypto/common/src/main/kotlin/app/passwordstore/crypto/CryptoHandler.kt @@ -41,4 +41,10 @@ public interface CryptoHandler