mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-13 12:34:59 -05:00
symmetric encryption working again
This commit is contained in:
parent
e4489bc78d
commit
1de42b0bfb
@ -1304,7 +1304,7 @@ public class Apg {
|
|||||||
context.getString(R.string.error_noEncryptionKeysOrPassPhrase));
|
context.getString(R.string.error_noEncryptionKeysOrPassPhrase));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signatureKeyId != 0) {
|
if (signatureKeyId != -1) {
|
||||||
signingKeyRing = getSecretKeyRing(signatureKeyId);
|
signingKeyRing = getSecretKeyRing(signatureKeyId);
|
||||||
signingKey = getSigningKey(signatureKeyId);
|
signingKey = getSigningKey(signatureKeyId);
|
||||||
if (signingKey == null) {
|
if (signingKey == null) {
|
||||||
@ -1333,6 +1333,7 @@ public class Apg {
|
|||||||
|
|
||||||
if (encryptionKeyIds.length == 0) {
|
if (encryptionKeyIds.length == 0) {
|
||||||
// symmetric encryption
|
// symmetric encryption
|
||||||
|
Log.d(Constants.TAG, "encryptionKeyIds length is 0 -> symmetric encryption");
|
||||||
cPk.addMethod(passPhrase.toCharArray());
|
cPk.addMethod(passPhrase.toCharArray());
|
||||||
}
|
}
|
||||||
for (int i = 0; i < encryptionKeyIds.length; ++i) {
|
for (int i = 0; i < encryptionKeyIds.length; ++i) {
|
||||||
@ -1346,7 +1347,7 @@ public class Apg {
|
|||||||
PGPSignatureGenerator signatureGenerator = null;
|
PGPSignatureGenerator signatureGenerator = null;
|
||||||
PGPV3SignatureGenerator signatureV3Generator = null;
|
PGPV3SignatureGenerator signatureV3Generator = null;
|
||||||
|
|
||||||
if (signatureKeyId != 0) {
|
if (signatureKeyId != -1) {
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setProgress(R.string.progress_preparingSignature, 10, 100);
|
progress.setProgress(R.string.progress_preparingSignature, 10, 100);
|
||||||
if (forceV3Signature) {
|
if (forceV3Signature) {
|
||||||
@ -1373,7 +1374,7 @@ public class Apg {
|
|||||||
compressGen = new PGPCompressedDataGenerator(compression);
|
compressGen = new PGPCompressedDataGenerator(compression);
|
||||||
bcpgOut = new BCPGOutputStream(compressGen.open(encryptOut));
|
bcpgOut = new BCPGOutputStream(compressGen.open(encryptOut));
|
||||||
}
|
}
|
||||||
if (signatureKeyId != 0) {
|
if (signatureKeyId != -1) {
|
||||||
if (forceV3Signature) {
|
if (forceV3Signature) {
|
||||||
signatureV3Generator.generateOnePassVersion(false).encode(bcpgOut);
|
signatureV3Generator.generateOnePassVersion(false).encode(bcpgOut);
|
||||||
} else {
|
} else {
|
||||||
@ -1394,7 +1395,7 @@ public class Apg {
|
|||||||
InputStream in = data.getInputStream();
|
InputStream in = data.getInputStream();
|
||||||
while ((n = in.read(buffer)) > 0) {
|
while ((n = in.read(buffer)) > 0) {
|
||||||
pOut.write(buffer, 0, n);
|
pOut.write(buffer, 0, n);
|
||||||
if (signatureKeyId != 0) {
|
if (signatureKeyId != -1) {
|
||||||
if (forceV3Signature) {
|
if (forceV3Signature) {
|
||||||
signatureV3Generator.update(buffer, 0, n);
|
signatureV3Generator.update(buffer, 0, n);
|
||||||
} else {
|
} else {
|
||||||
@ -1410,7 +1411,7 @@ public class Apg {
|
|||||||
|
|
||||||
literalGen.close();
|
literalGen.close();
|
||||||
|
|
||||||
if (signatureKeyId != 0) {
|
if (signatureKeyId != -1) {
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setProgress(R.string.progress_generatingSignature, 95, 100);
|
progress.setProgress(R.string.progress_generatingSignature, 95, 100);
|
||||||
if (forceV3Signature) {
|
if (forceV3Signature) {
|
||||||
|
@ -1,9 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Intent;
|
|
||||||
|
|
||||||
public class ApgApplication extends Application {
|
public class ApgApplication extends Application {
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
// generate key
|
// generate key
|
||||||
public static final String ALGORITHM = "algorithm";
|
public static final String ALGORITHM = "algorithm";
|
||||||
public static final String KEY_SIZE = "key_size";
|
public static final String KEY_SIZE = "key_size";
|
||||||
public static final String PASSPHRASE = "passphrase";
|
public static final String SYMMETRIC_PASSPHRASE = "passphrase";
|
||||||
public static final String MASTER_KEY = "master_key";
|
public static final String MASTER_KEY = "master_key";
|
||||||
|
|
||||||
// encrypt
|
// encrypt
|
||||||
@ -182,7 +182,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
try {
|
try {
|
||||||
// Input
|
// Input
|
||||||
int algorithm = data.getInt(ALGORITHM);
|
int algorithm = data.getInt(ALGORITHM);
|
||||||
String passphrase = data.getString(PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
int keysize = data.getInt(KEY_SIZE);
|
int keysize = data.getInt(KEY_SIZE);
|
||||||
PGPSecretKey masterKey = null;
|
PGPSecretKey masterKey = null;
|
||||||
if (data.containsKey(MASTER_KEY)) {
|
if (data.containsKey(MASTER_KEY)) {
|
||||||
@ -206,7 +206,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
case ACTION_GENERATE_DEFAULT_RSA_KEYS:
|
case ACTION_GENERATE_DEFAULT_RSA_KEYS:
|
||||||
// generate one RSA 2048 key for signing and one subkey for encrypting!
|
// generate one RSA 2048 key for signing and one subkey for encrypting!
|
||||||
try {
|
try {
|
||||||
String passphrase = data.getString(PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
// Operation
|
// Operation
|
||||||
PGPSecretKeyRing masterKeyRing = Apg.createKey(this, Id.choice.algorithm.rsa, 2048,
|
PGPSecretKeyRing masterKeyRing = Apg.createKey(this, Id.choice.algorithm.rsa, 2048,
|
||||||
@ -232,7 +232,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
try {
|
try {
|
||||||
// Input
|
// Input
|
||||||
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
String passphrase = data.getString(PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
byte[] bytes = data.getByteArray(BYTES);
|
byte[] bytes = data.getByteArray(BYTES);
|
||||||
|
|
||||||
@ -251,16 +251,19 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
||||||
|
|
||||||
if (generateSignature) {
|
if (generateSignature) {
|
||||||
|
Log.d(Constants.TAG, "generate signature...");
|
||||||
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, false,
|
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, false,
|
||||||
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
||||||
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
||||||
.getPreferences(this).getForceV3Signatures(), this);
|
.getPreferences(this).getForceV3Signatures(), this);
|
||||||
} else if (signOnly) {
|
} else if (signOnly) {
|
||||||
|
Log.d(Constants.TAG, "sign only...");
|
||||||
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
||||||
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
||||||
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
||||||
.getForceV3Signatures(), this);
|
.getForceV3Signatures(), this);
|
||||||
} else {
|
} else {
|
||||||
|
Log.d(Constants.TAG, "encrypt...");
|
||||||
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
||||||
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
||||||
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
||||||
@ -301,7 +304,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
try {
|
try {
|
||||||
// Input
|
// Input
|
||||||
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
String passphrase = data.getString(PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
String inputFile = data.getString(INPUT_FILE);
|
String inputFile = data.getString(INPUT_FILE);
|
||||||
String outputFile = data.getString(OUTPUT_FILE);
|
String outputFile = data.getString(OUTPUT_FILE);
|
||||||
@ -343,16 +346,19 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
// Operation
|
// Operation
|
||||||
if (generateSignature) {
|
if (generateSignature) {
|
||||||
|
Log.d(Constants.TAG, "generate signature...");
|
||||||
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, true,
|
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, true,
|
||||||
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
||||||
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
||||||
.getPreferences(this).getForceV3Signatures(), this);
|
.getPreferences(this).getForceV3Signatures(), this);
|
||||||
} else if (signOnly) {
|
} else if (signOnly) {
|
||||||
|
Log.d(Constants.TAG, "sign only...");
|
||||||
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
||||||
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
||||||
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
||||||
.getForceV3Signatures(), this);
|
.getForceV3Signatures(), this);
|
||||||
} else {
|
} else {
|
||||||
|
Log.d(Constants.TAG, "encrypt...");
|
||||||
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
||||||
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
||||||
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
||||||
@ -373,7 +379,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
try {
|
try {
|
||||||
// Input
|
// Input
|
||||||
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
String passphrase = data.getString(PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
Uri providerUri = Uri.parse(data.getString(PROVIDER_URI));
|
Uri providerUri = Uri.parse(data.getString(PROVIDER_URI));
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
// fill values for this action
|
// fill values for this action
|
||||||
Bundle data = new Bundle();
|
Bundle data = new Bundle();
|
||||||
data.putString(ApgService.PASSPHRASE, mCurrentPassPhrase);
|
data.putString(ApgService.SYMMETRIC_PASSPHRASE, mCurrentPassPhrase);
|
||||||
|
|
||||||
intent.putExtra(ApgService.EXTRA_DATA, data);
|
intent.putExtra(ApgService.EXTRA_DATA, data);
|
||||||
|
|
||||||
|
@ -158,21 +158,19 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case Id.menu.option.encrypt_to_clipboard: {
|
case Id.menu.option.encrypt_to_clipboard:
|
||||||
Log.d(Constants.TAG, "encrypt_to_clipboard option item clicked!");
|
|
||||||
encryptToClipboardClicked();
|
encryptToClipboardClicked();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
case Id.menu.option.encrypt: {
|
case Id.menu.option.encrypt:
|
||||||
encryptClicked();
|
encryptClicked();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -726,46 +724,36 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public void passPhraseCallback(long keyId, String passPhrase) {
|
|
||||||
// // super.passPhraseCallback(keyId, passPhrase);
|
|
||||||
// if (mEncryptTarget == Id.target.file) {
|
|
||||||
// askForOutputFilename();
|
|
||||||
// } else {
|
|
||||||
// encryptStart();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
private void encryptStart() {
|
private void encryptStart() {
|
||||||
boolean useAsciiArmour = true;
|
|
||||||
long encryptionKeyIds[] = null;
|
|
||||||
long signatureKeyId = 0;
|
|
||||||
int compressionId = 0;
|
|
||||||
boolean signOnly = false;
|
|
||||||
|
|
||||||
String passPhrase = null;
|
|
||||||
if (mMode.getCurrentView().getId() == R.id.modeSymmetric) {
|
|
||||||
passPhrase = mPassPhrase.getText().toString();
|
|
||||||
if (passPhrase.length() == 0) {
|
|
||||||
passPhrase = null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
encryptionKeyIds = mEncryptionKeyIds;
|
|
||||||
signatureKeyId = getSecretKeyId();
|
|
||||||
signOnly = (mEncryptionKeyIds == null || mEncryptionKeyIds.length == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send all information needed to service to edit key in other thread
|
// Send all information needed to service to edit key in other thread
|
||||||
Intent intent = new Intent(this, ApgService.class);
|
Intent intent = new Intent(this, ApgService.class);
|
||||||
|
|
||||||
// fill values for this action
|
// fill values for this action
|
||||||
Bundle data = new Bundle();
|
Bundle data = new Bundle();
|
||||||
|
|
||||||
|
boolean useAsciiArmour = true;
|
||||||
|
long encryptionKeyIds[] = null;
|
||||||
|
long signatureKeyId = -1; // -1 means no signature!
|
||||||
|
int compressionId = 0;
|
||||||
|
boolean signOnly = false;
|
||||||
|
|
||||||
|
if (mMode.getCurrentView().getId() == R.id.modeSymmetric) {
|
||||||
|
Log.d(Constants.TAG, "Symmetric encryption enabled!");
|
||||||
|
String passPhrase = mPassPhrase.getText().toString();
|
||||||
|
if (passPhrase.length() == 0) {
|
||||||
|
passPhrase = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.putString(ApgService.SYMMETRIC_PASSPHRASE, passPhrase);
|
||||||
|
} else {
|
||||||
|
encryptionKeyIds = mEncryptionKeyIds;
|
||||||
|
signatureKeyId = getSecretKeyId();
|
||||||
|
signOnly = (mEncryptionKeyIds == null || mEncryptionKeyIds.length == 0);
|
||||||
|
}
|
||||||
|
|
||||||
// choose default settings, action and data bundle by target
|
// choose default settings, action and data bundle by target
|
||||||
if (mContentUri != null) {
|
if (mContentUri != null) {
|
||||||
|
|
||||||
intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_ENCRYPT_SIGN_STREAM);
|
intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_ENCRYPT_SIGN_STREAM);
|
||||||
|
|
||||||
data.putString(ApgService.PROVIDER_URI, mContentUri.toString());
|
data.putString(ApgService.PROVIDER_URI, mContentUri.toString());
|
||||||
|
|
||||||
} else if (mEncryptTarget == Id.target.file) {
|
} else if (mEncryptTarget == Id.target.file) {
|
||||||
@ -795,7 +783,6 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
data.putByteArray(ApgService.BYTES, message.getBytes());
|
data.putByteArray(ApgService.BYTES, message.getBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mOverrideAsciiArmour) {
|
if (mOverrideAsciiArmour) {
|
||||||
@ -1034,32 +1021,4 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// protected Dialog onCreateDialog(int id) {
|
|
||||||
// switch (id) {
|
|
||||||
// case Id.dialog.output_filename: {
|
|
||||||
// return FileDialog.build(this, getString(R.string.title_encryptToFile),
|
|
||||||
// getString(R.string.specifyFileToEncryptTo), mOutputFilename,
|
|
||||||
// new FileDialog.OnClickListener() {
|
|
||||||
// public void onOkClick(String filename, boolean checked) {
|
|
||||||
// removeDialog(Id.dialog.output_filename);
|
|
||||||
// mOutputFilename = filename;
|
|
||||||
// encryptStart();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public void onCancelClick() {
|
|
||||||
// removeDialog(Id.dialog.output_filename);
|
|
||||||
// }
|
|
||||||
// }, getString(R.string.filemanager_titleSave),
|
|
||||||
// getString(R.string.filemanager_btnSave), null, Id.request.output_filename);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// default: {
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return super.onCreateDialog(id);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
|
|||||||
} else {
|
} else {
|
||||||
passPhrase = "";
|
passPhrase = "";
|
||||||
}
|
}
|
||||||
data.putString(ApgService.PASSPHRASE, passPhrase);
|
data.putString(ApgService.SYMMETRIC_PASSPHRASE, passPhrase);
|
||||||
data.putInt(ApgService.ALGORITHM, mNewKeyAlgorithmChoice.getId());
|
data.putInt(ApgService.ALGORITHM, mNewKeyAlgorithmChoice.getId());
|
||||||
data.putInt(ApgService.KEY_SIZE, mNewKeySize);
|
data.putInt(ApgService.KEY_SIZE, mNewKeySize);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user