From a77c217b82a567a71ff22a419772fce861c9df95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 18 Sep 2014 15:28:51 +0200 Subject: Fixes for nfc decrypt --- .../sufficientlysecure/keychain/pgp/PgpDecryptVerify.java | 3 +-- .../keychain/remote/OpenPgpService.java | 9 +++++---- .../keychain/service/results/DecryptVerifyResult.java | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'OpenKeychain/src/main/java') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index e8f139b22..9d21e89b3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -418,8 +418,7 @@ public class PgpDecryptVerify { log.add(LogType.MSG_DC_PENDING_NFC, indent +1); DecryptVerifyResult result = new DecryptVerifyResult(DecryptVerifyResult.RESULT_PENDING_NFC, log); - result.setNfcEncryptedSessionKey(e.encryptedSessionKey); - // TODO save passphrase here? + result.setNfcState(e.encryptedSessionKey, mPassphrase); return result; } encryptedData = encryptedDataAsymmetric; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index b23662a6e..31427cce2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -277,7 +277,8 @@ public class OpenPgpService extends RemoteService { } } }, - inputData, os); + inputData, os + ); builder.setEnableAsciiArmorOutput(asciiArmor) .setVersionHeader(PgpHelper.getVersionForHeader(this)) .setSignatureHashAlgorithm(accSettings.getHashAlgorithm()) @@ -379,7 +380,8 @@ public class OpenPgpService extends RemoteService { } } }, - inputData, os); + inputData, os + ); builder.setEnableAsciiArmorOutput(asciiArmor) .setVersionHeader(PgpHelper.getVersionForHeader(this)) .setCompressionId(accSettings.getCompression()) @@ -524,9 +526,8 @@ public class OpenPgpService extends RemoteService { "Decryption of symmetric content not supported by API!"); } else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_NFC) == DecryptVerifyResult.RESULT_PENDING_NFC) { - // TODO get passphrase here? currently not in DecryptVerifyResult return getNfcDecryptIntent( - data, null, pgpResult.getNfcEncryptedSessionKey()); + data, pgpResult.getNfcPassphrase(), pgpResult.getNfcEncryptedSessionKey()); } else { throw new PgpGeneralException( "Encountered unhandled type of pending action not supported by API!"); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/DecryptVerifyResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/DecryptVerifyResult.java index 2113c1ab1..4a0aec548 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/DecryptVerifyResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/DecryptVerifyResult.java @@ -31,10 +31,12 @@ public class DecryptVerifyResult extends OperationResult { // fifth to sixth bit in addition indicate specific type of pending public static final int RESULT_PENDING_ASYM_PASSPHRASE = RESULT_PENDING + 16; public static final int RESULT_PENDING_SYM_PASSPHRASE = RESULT_PENDING + 32; - public static final int RESULT_PENDING_NFC = RESULT_PENDING + 48; + public static final int RESULT_PENDING_NFC = RESULT_PENDING + 64; long mKeyIdPassphraseNeeded; + byte[] mNfcSessionKey; + String mNfcPassphrase; OpenPgpSignatureResult mSignatureResult; OpenPgpMetadata mDecryptMetadata; @@ -47,14 +49,19 @@ public class DecryptVerifyResult extends OperationResult { mKeyIdPassphraseNeeded = keyIdPassphraseNeeded; } - public void setNfcEncryptedSessionKey(byte[] sessionKey) { + public void setNfcState(byte[] sessionKey, String passphrase) { mNfcSessionKey = sessionKey; + mNfcPassphrase = passphrase; } public byte[] getNfcEncryptedSessionKey() { return mNfcSessionKey; } + public String getNfcPassphrase() { + return mNfcPassphrase; + } + public OpenPgpSignatureResult getSignatureResult() { return mSignatureResult; } @@ -72,7 +79,7 @@ public class DecryptVerifyResult extends OperationResult { } public boolean isPending() { - return (mResult & RESULT_PENDING) != 0; + return (mResult & RESULT_PENDING) == RESULT_PENDING; } public DecryptVerifyResult(int result, OperationLog log) { @@ -85,6 +92,7 @@ public class DecryptVerifyResult extends OperationResult { mSignatureResult = source.readParcelable(OpenPgpSignatureResult.class.getClassLoader()); mDecryptMetadata = source.readParcelable(OpenPgpMetadata.class.getClassLoader()); mNfcSessionKey = source.readInt() != 0 ? source.createByteArray() : null; + mNfcPassphrase = source.readString(); } public int describeContents() { @@ -102,6 +110,7 @@ public class DecryptVerifyResult extends OperationResult { } else { dest.writeInt(0); } + dest.writeString(mNfcPassphrase); } public static final Creator CREATOR = new Creator() { -- cgit v1.2.3