diff options
Diffstat (limited to 'OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp')
| -rw-r--r-- | OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpImportExport.java | 46 | ||||
| -rw-r--r-- | OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java | 16 |
2 files changed, 44 insertions, 18 deletions
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpImportExport.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpImportExport.java index d7ab5d8fe..eff8de224 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpImportExport.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpImportExport.java @@ -24,10 +24,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; import org.spongycastle.bcpg.ArmoredOutputStream; -import org.spongycastle.openpgp.operator.KeyFingerPrintCalculator; -import org.spongycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator; import org.spongycastle.openpgp.PGPException; import org.spongycastle.openpgp.PGPKeyRing; import org.spongycastle.openpgp.PGPObjectFactory; @@ -36,6 +37,7 @@ import org.spongycastle.openpgp.PGPPublicKeyRing; import org.spongycastle.openpgp.PGPSecretKey; import org.spongycastle.openpgp.PGPSecretKeyRing; import org.spongycastle.openpgp.PGPUtil; +import org.spongycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Id; import org.sufficientlysecure.keychain.R; @@ -100,17 +102,23 @@ public class PgpImportExport { } } - public Bundle importKeyRings(InputData data) throws PgpGeneralException, FileNotFoundException, - PGPException, IOException { + /** + * Imports keys from given data. If keyIds is given only those are imported + * + * @param data + * @param keyIds + * @return + * @throws PgpGeneralException + * @throws FileNotFoundException + * @throws PGPException + * @throws IOException + */ + public Bundle importKeyRings(InputData data, ArrayList<Long> keyIds) + throws PgpGeneralException, FileNotFoundException, PGPException, IOException { Bundle returnData = new Bundle(); updateProgress(R.string.progress_importingSecretKeys, 0, 100); - if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - throw new PgpGeneralException( - mContext.getString(R.string.error_externalStorageNotReady)); - } - PositionAwareInputStream progressIn = new PositionAwareInputStream(data.getInputStream()); // need to have access to the bufferedInput, so we can reuse it for the possible @@ -137,7 +145,16 @@ public class PgpImportExport { int status = Integer.MIN_VALUE; // out of bounds value - status = storeKeyRingInCache(keyring); + if (keyIds != null) { + if (keyIds.contains(keyring.getPublicKey().getKeyID())) { + status = storeKeyRingInCache(keyring); + } else { + Log.d(Constants.TAG, "not selected! key id: " + + keyring.getPublicKey().getKeyID()); + } + } else { + status = storeKeyRingInCache(keyring); + } if (status == Id.return_value.error) { throw new PgpGeneralException( @@ -264,11 +281,14 @@ public class PgpImportExport { if (save) { ProviderHelper.saveKeyRing(mContext, secretKeyRing); - // TODO: preserve certifications (http://osdir.com/ml/encryption.bouncy-castle.devel/2007-01/msg00054.html ?) + // TODO: preserve certifications + // (http://osdir.com/ml/encryption.bouncy-castle.devel/2007-01/msg00054.html ?) PGPPublicKeyRing newPubRing = null; - for (PGPPublicKey key : new IterableIterator<PGPPublicKey>(secretKeyRing.getPublicKeys())) { + for (PGPPublicKey key : new IterableIterator<PGPPublicKey>( + secretKeyRing.getPublicKeys())) { if (newPubRing == null) { - newPubRing = new PGPPublicKeyRing(key.getEncoded(), new JcaKeyFingerprintCalculator()); + newPubRing = new PGPPublicKeyRing(key.getEncoded(), + new JcaKeyFingerprintCalculator()); } newPubRing = PGPPublicKeyRing.insertPublicKey(newPubRing, key); } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java index e5cf91f39..37a3cb8e2 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java @@ -137,7 +137,7 @@ public class PgpKeyHelper { PGPPublicKey masterKey = null; for (int i = 0; i < encryptKeys.size(); ++i) { PGPPublicKey key = encryptKeys.get(i); - if (!isExpired(key) && !key.isRevoked()) { + if (!isExpired(key) && !key.isRevoked()) { if (key.isMasterKey()) { masterKey = key; } else { @@ -488,7 +488,7 @@ public class PgpKeyHelper { return isSecretKeyPrivateEmpty(secretKey); } - public static String getSmallFingerPrint(long keyId) { + public static String convertKeyIdToHex(long keyId) { String fingerPrint = Long.toHexString(keyId & 0xffffffffL).toUpperCase(Locale.US); while (fingerPrint.length() < 8) { fingerPrint = "0" + fingerPrint; @@ -496,11 +496,17 @@ public class PgpKeyHelper { return fingerPrint; } - public static String keyToHex(long keyId) { - return getSmallFingerPrint(keyId >> 32) + getSmallFingerPrint(keyId); + /** + * TODO: what is the difference to the other function? + * + * @param keyId + * @return + */ + public static String convertKeyToHex(long keyId) { + return convertKeyIdToHex(keyId >> 32) + convertKeyIdToHex(keyId); } - public static long keyFromHex(String data) { + public static long convertHexToKeyId(String data) { int len = data.length(); String s2 = data.substring(len - 8); String s1 = data.substring(0, len - 8); |
