Merge branch 'master' into yubikey

Conflicts:
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java
This commit is contained in:
Dominik Schürmann 2014-08-14 13:31:01 +02:00
commit 6da17ef6bb
116 changed files with 2406 additions and 3259 deletions

View File

@ -3,7 +3,7 @@
* Key edit: awesome new design, key revocation * Key edit: awesome new design, key revocation
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records * Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
* New first time screen * New first time screen
* New create key screen: autocompletion of name and email based on your personal Android accounts * New key creation screen: autocompletion of name and email based on your personal Android accounts
* File encryption: awesome new design, support for encrypting multiple files * File encryption: awesome new design, support for encrypting multiple files
* New icons to show status of key (by Brennan Novak) * New icons to show status of key (by Brennan Novak)
* Important bug fix: Importing of large key collections from a file is now possible * Important bug fix: Importing of large key collections from a file is now possible
@ -31,7 +31,7 @@ This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2
2.5 2.5
* Fix decryption of symmetric pgp messages/files * Fix decryption of symmetric pgp messages/files
* Refactored edit key screen (thanks to Ash Hughes) * Refactored key edit screen (thanks to Ash Hughes)
* New modern design for encrypt/decrypt screens * New modern design for encrypt/decrypt screens
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup) * OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
@ -92,14 +92,14 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
1.0.8 1.0.8
* Basic keyserver support (HKP, please report bugs :)) * Basic keyserver support (HKP, please report bugs :))
* App2sd (untested, let me know if there are problems) * App2sd (untested, let me know if there are problems)
* More choices for pass phrase cache: 1, 2, 4, 8, hours * More choices for passphrase cache: 1, 2, 4, 8, hours
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick) * Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
* Bugfixes * Bugfixes
* Optimizations * Optimizations
1.0.7 1.0.7
* Clear sign problem with lacking trailing newline fixed * Clear sign problem with lacking trailing newline fixed
* More options for pass phrase cache time to live (20, 40, 60 mins) * More options for passphrase cache time to live (20, 40, 60 mins)
1.0.6 1.0.6
* Account adding crash on Froyo fixed * Account adding crash on Froyo fixed

View File

@ -1,55 +0,0 @@
# Design Notes on Open-Keychain
This document contains notes on the software design of open keychain. Points
with a * are yet to be implemented.
## Database design
The database has two distinct types of tables:
- The key\_ring\_{public,secret} tables, which hold binary blobs of all known
public and private keys, respectively, and nothing else.
- All other tables, which cache information about key rings in a consistent
manner. This information includes various pieces of metadata about each key's
subkeys, user ids, and certificates.
### Constraints
All tables in the database have FOREIGN KEY constraints related to the
key\_ring\_public table. This is also true for the key\_ring\_secret table,
which means that secret keys cannot exist in the database without their public
key counterparts. This has implications in particular on the order of insertion
for private key rings and their public key ring counterparts into the database,
even more so when editing a key ring is edited.
### Cache usage considerations
It is of note that extraction of metadata from key rings is in some cases a
surprisingly expensive operation. As a prime example (heh), properly extracting
a key's associated primary user id requires examination and possibly
verification of all self-certificates, which in turn requires examination of
all certificates.
To ensure consistency, each type of metadata must be extracted one way in
exactly one routine. For this reason, it is often desirable to make use of
cached data even when the underlying pgp key ring objects are contextually
available.
## Further work / WIP
### Separation of concerns
Roughly speaking, the crypto code should be strictly separated from the android
code. At the time of this writing (30.04.14), most of these thoughts are yet to
be put into practice.
There are three aspects to OK which should be kept largely separate:
- Firstly, there is Code dealing with pgp and crypto. This code exclusively makes
use of the BouncyCastle library. It lives in the .pgp package.
- Secondly, there is code dealing with user interface and system integration,
which makes exclusive use of Android classes.
- Between these, there is glue code that is responsible for mapping pgp objects
to the database, and calling methods provided by the crypto code from the ui
code.

View File

@ -17,8 +17,8 @@ import org.spongycastle.bcpg.SignaturePacket;
import org.spongycastle.bcpg.UserIDPacket; import org.spongycastle.bcpg.UserIDPacket;
import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.bcpg.sig.KeyFlags;
import org.spongycastle.openpgp.PGPSignature; import org.spongycastle.openpgp.PGPSignature;
import org.spongycastle.bcpg.PublicKeyAlgorithmTags;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.Constants.choice.algorithm;
import org.sufficientlysecure.keychain.service.OperationResultParcel.OperationLog; import org.sufficientlysecure.keychain.service.OperationResultParcel.OperationLog;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyAdd; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyAdd;
@ -67,11 +67,11 @@ public class PgpKeyOperationTest {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.ENCRYPT_COMMS, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.ENCRYPT_COMMS, null));
parcel.mAddUserIds.add("twi"); parcel.mAddUserIds.add("twi");
parcel.mAddUserIds.add("pink"); parcel.mAddUserIds.add("pink");
@ -107,7 +107,7 @@ public class PgpKeyOperationTest {
{ {
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, new Random().nextInt(256)+255, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, new Random().nextInt(256)+255, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddUserIds.add("shy"); parcel.mAddUserIds.add("shy");
parcel.mNewPassphrase = passphrase; parcel.mNewPassphrase = passphrase;
@ -119,7 +119,7 @@ public class PgpKeyOperationTest {
{ {
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.elgamal, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.ELGAMAL_ENCRYPT, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddUserIds.add("shy"); parcel.mAddUserIds.add("shy");
parcel.mNewPassphrase = passphrase; parcel.mNewPassphrase = passphrase;
@ -142,7 +142,7 @@ public class PgpKeyOperationTest {
{ {
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA, null));
parcel.mAddUserIds.add("shy"); parcel.mAddUserIds.add("shy");
parcel.mNewPassphrase = passphrase; parcel.mNewPassphrase = passphrase;
@ -153,7 +153,7 @@ public class PgpKeyOperationTest {
{ {
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mNewPassphrase = passphrase; parcel.mNewPassphrase = passphrase;
UncachedKeyRing ring = op.createSecretKeyRing(parcel).getRing(); UncachedKeyRing ring = op.createSecretKeyRing(parcel).getRing();
@ -177,7 +177,7 @@ public class PgpKeyOperationTest {
public void testMasterFlags() throws Exception { public void testMasterFlags() throws Exception {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER | KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER | KeyFlags.SIGN_DATA, null));
parcel.mAddUserIds.add("luna"); parcel.mAddUserIds.add("luna");
ring = op.createSecretKeyRing(parcel).getRing(); ring = op.createSecretKeyRing(parcel).getRing();
@ -300,7 +300,7 @@ public class PgpKeyOperationTest {
long expiry = new Date().getTime() / 1000 + 159; long expiry = new Date().getTime() / 1000 + 159;
int flags = KeyFlags.SIGN_DATA; int flags = KeyFlags.SIGN_DATA;
int bits = 1024 + new Random().nextInt(8); int bits = 1024 + new Random().nextInt(8);
parcel.mAddSubKeys.add(new SubkeyAdd(algorithm.rsa, bits, flags, expiry)); parcel.mAddSubKeys.add(new SubkeyAdd(PublicKeyAlgorithmTags.RSA_GENERAL, bits, flags, expiry));
UncachedKeyRing modified = applyModificationWithChecks(parcel, ring, onlyA, onlyB); UncachedKeyRing modified = applyModificationWithChecks(parcel, ring, onlyA, onlyB);
@ -341,7 +341,7 @@ public class PgpKeyOperationTest {
{ // bad keysize should fail { // bad keysize should fail
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SubkeyAdd( parcel.mAddSubKeys.add(new SubkeyAdd(
algorithm.rsa, new Random().nextInt(512), KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, new Random().nextInt(512), KeyFlags.SIGN_DATA, null));
CanonicalizedSecretKeyRing secretRing = new CanonicalizedSecretKeyRing(ring.getEncoded(), false, 0); CanonicalizedSecretKeyRing secretRing = new CanonicalizedSecretKeyRing(ring.getEncoded(), false, 0);
modified = op.modifySecretKeyRing(secretRing, parcel, passphrase).getRing(); modified = op.modifySecretKeyRing(secretRing, parcel, passphrase).getRing();
@ -351,7 +351,7 @@ public class PgpKeyOperationTest {
{ // a past expiry should fail { // a past expiry should fail
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SubkeyAdd(algorithm.rsa, 1024, KeyFlags.SIGN_DATA, parcel.mAddSubKeys.add(new SubkeyAdd(PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA,
new Date().getTime()/1000-10)); new Date().getTime()/1000-10));
CanonicalizedSecretKeyRing secretRing = new CanonicalizedSecretKeyRing(ring.getEncoded(), false, 0); CanonicalizedSecretKeyRing secretRing = new CanonicalizedSecretKeyRing(ring.getEncoded(), false, 0);

View File

@ -12,6 +12,7 @@ import org.spongycastle.bcpg.Packet;
import org.spongycastle.bcpg.PacketTags; import org.spongycastle.bcpg.PacketTags;
import org.spongycastle.bcpg.UserIDPacket; import org.spongycastle.bcpg.UserIDPacket;
import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.bcpg.sig.KeyFlags;
import org.spongycastle.bcpg.PublicKeyAlgorithmTags;
import org.spongycastle.openpgp.PGPPrivateKey; import org.spongycastle.openpgp.PGPPrivateKey;
import org.spongycastle.openpgp.PGPPublicKey; import org.spongycastle.openpgp.PGPPublicKey;
import org.spongycastle.openpgp.PGPSecretKey; import org.spongycastle.openpgp.PGPSecretKey;
@ -63,11 +64,11 @@ public class UncachedKeyringCanonicalizeTest {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.ENCRYPT_COMMS, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.ENCRYPT_COMMS, null));
parcel.mAddUserIds.add("twi"); parcel.mAddUserIds.add("twi");
parcel.mAddUserIds.add("pink"); parcel.mAddUserIds.add("pink");
@ -276,7 +277,7 @@ public class UncachedKeyringCanonicalizeTest {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddUserIds.add("trix"); parcel.mAddUserIds.add("trix");
PgpKeyOperation op = new PgpKeyOperation(null); PgpKeyOperation op = new PgpKeyOperation(null);

View File

@ -9,6 +9,7 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowLog; import org.robolectric.shadows.ShadowLog;
import org.spongycastle.bcpg.PacketTags; import org.spongycastle.bcpg.PacketTags;
import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.bcpg.sig.KeyFlags;
import org.spongycastle.bcpg.PublicKeyAlgorithmTags;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.service.OperationResultParcel; import org.sufficientlysecure.keychain.service.OperationResultParcel;
import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult; import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult;
@ -63,9 +64,9 @@ public class UncachedKeyringMergeTest {
{ {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA, null));
parcel.mAddUserIds.add("twi"); parcel.mAddUserIds.add("twi");
parcel.mAddUserIds.add("pink"); parcel.mAddUserIds.add("pink");
@ -82,7 +83,7 @@ public class UncachedKeyringMergeTest {
{ {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddUserIds.add("shy"); parcel.mAddUserIds.add("shy");
// passphrase is tested in PgpKeyOperationTest, just use empty here // passphrase is tested in PgpKeyOperationTest, just use empty here
@ -188,7 +189,7 @@ public class UncachedKeyringMergeTest {
parcel.reset(); parcel.reset();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA, null));
modifiedA = op.modifySecretKeyRing(secretRing, parcel, "").getRing(); modifiedA = op.modifySecretKeyRing(secretRing, parcel, "").getRing();
modifiedB = op.modifySecretKeyRing(secretRing, parcel, "").getRing(); modifiedB = op.modifySecretKeyRing(secretRing, parcel, "").getRing();

View File

@ -8,6 +8,7 @@ import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowLog; import org.robolectric.shadows.ShadowLog;
import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.bcpg.sig.KeyFlags;
import org.spongycastle.bcpg.PublicKeyAlgorithmTags;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult; import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult;
@ -36,11 +37,11 @@ public class UncachedKeyringTest {
SaveKeyringParcel parcel = new SaveKeyringParcel(); SaveKeyringParcel parcel = new SaveKeyringParcel();
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.CERTIFY_OTHER, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.CERTIFY_OTHER, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.SIGN_DATA, null));
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd( parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
Constants.choice.algorithm.rsa, 1024, KeyFlags.ENCRYPT_COMMS, null)); PublicKeyAlgorithmTags.RSA_GENERAL, 1024, KeyFlags.ENCRYPT_COMMS, null));
parcel.mAddUserIds.add("twi"); parcel.mAddUserIds.add("twi");
parcel.mAddUserIds.add("pink"); parcel.mAddUserIds.add("pink");

View File

@ -66,7 +66,7 @@ public final class Constants {
public static final String LANGUAGE = "language"; public static final String LANGUAGE = "language";
public static final String KEY_SERVERS = "keyServers"; public static final String KEY_SERVERS = "keyServers";
public static final String KEY_SERVERS_DEFAULT_VERSION = "keyServersDefaultVersion"; public static final String KEY_SERVERS_DEFAULT_VERSION = "keyServersDefaultVersion";
public static final String CONCEAL_PGP_APPLICATION = "concealPgpApplication"; public static final String WRITE_VERSION_HEADER = "writeVersionHeader";
public static final String FIRST_TIME = "firstTime"; public static final String FIRST_TIME = "firstTime";
} }

View File

@ -195,13 +195,13 @@ public class Preferences {
} }
} }
public void setConcealPgpApplication(boolean conceal) { public void setWriteVersionHeader(boolean conceal) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(Constants.Pref.CONCEAL_PGP_APPLICATION, conceal); editor.putBoolean(Constants.Pref.WRITE_VERSION_HEADER, conceal);
editor.commit(); editor.commit();
} }
public boolean getConcealPgpApplication() { public boolean getWriteVersionHeader() {
return mSharedPreferences.getBoolean(Constants.Pref.CONCEAL_PGP_APPLICATION, false); return mSharedPreferences.getBoolean(Constants.Pref.WRITE_VERSION_HEADER, false);
} }
} }

View File

@ -65,6 +65,10 @@ public class OpenPgpSignatureResultBuilder {
this.mSignatureAvailable = signatureAvailable; this.mSignatureAvailable = signatureAvailable;
} }
public boolean isValidSignature() {
return mValidSignature;
}
public OpenPgpSignatureResult build() { public OpenPgpSignatureResult build() {
if (mSignatureAvailable) { if (mSignatureAvailable) {
OpenPgpSignatureResult result = new OpenPgpSignatureResult(); OpenPgpSignatureResult result = new OpenPgpSignatureResult();

View File

@ -18,6 +18,9 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import android.webkit.MimeTypeMap;
import org.openintents.openpgp.OpenPgpMetadata;
import org.spongycastle.bcpg.ArmoredInputStream; import org.spongycastle.bcpg.ArmoredInputStream;
import org.spongycastle.openpgp.PGPCompressedData; import org.spongycastle.openpgp.PGPCompressedData;
import org.spongycastle.openpgp.PGPEncryptedData; import org.spongycastle.openpgp.PGPEncryptedData;
@ -43,8 +46,10 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ProgressScaler;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -52,6 +57,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLConnection;
import java.security.SignatureException; import java.security.SignatureException;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
@ -69,6 +75,7 @@ public class PgpDecryptVerify {
private boolean mAllowSymmetricDecryption; private boolean mAllowSymmetricDecryption;
private String mPassphrase; private String mPassphrase;
private Set<Long> mAllowedKeyIds; private Set<Long> mAllowedKeyIds;
private boolean mDecryptMetadataOnly;
private PgpDecryptVerify(Builder builder) { private PgpDecryptVerify(Builder builder) {
// private Constructor can only be called from Builder // private Constructor can only be called from Builder
@ -81,6 +88,7 @@ public class PgpDecryptVerify {
this.mAllowSymmetricDecryption = builder.mAllowSymmetricDecryption; this.mAllowSymmetricDecryption = builder.mAllowSymmetricDecryption;
this.mPassphrase = builder.mPassphrase; this.mPassphrase = builder.mPassphrase;
this.mAllowedKeyIds = builder.mAllowedKeyIds; this.mAllowedKeyIds = builder.mAllowedKeyIds;
this.mDecryptMetadataOnly = builder.mDecryptMetadataOnly;
} }
public static class Builder { public static class Builder {
@ -95,6 +103,7 @@ public class PgpDecryptVerify {
private boolean mAllowSymmetricDecryption = true; private boolean mAllowSymmetricDecryption = true;
private String mPassphrase = null; private String mPassphrase = null;
private Set<Long> mAllowedKeyIds = null; private Set<Long> mAllowedKeyIds = null;
private boolean mDecryptMetadataOnly = false;
public Builder(ProviderHelper providerHelper, PassphraseCache passphraseCache, public Builder(ProviderHelper providerHelper, PassphraseCache passphraseCache,
InputData data, OutputStream outStream) { InputData data, OutputStream outStream) {
@ -124,7 +133,16 @@ public class PgpDecryptVerify {
* This means only ciphertexts encrypted for one of these private key can be decrypted. * This means only ciphertexts encrypted for one of these private key can be decrypted.
*/ */
public Builder setAllowedKeyIds(Set<Long> allowedKeyIds) { public Builder setAllowedKeyIds(Set<Long> allowedKeyIds) {
this.mAllowedKeyIds = allowedKeyIds; mAllowedKeyIds = allowedKeyIds;
return this;
}
/**
* If enabled, the actual decryption/verification of the content will not be executed.
* The metadata only will be decrypted and returned.
*/
public Builder setDecryptMetadataOnly(boolean decryptMetadataOnly) {
mDecryptMetadataOnly = decryptMetadataOnly;
return this; return this;
} }
@ -146,7 +164,8 @@ public class PgpDecryptVerify {
} }
public interface PassphraseCache { public interface PassphraseCache {
public String getCachedPassphrase(long masterKeyId); public String getCachedPassphrase(long masterKeyId)
throws NoSecretKeyException;
} }
public static class InvalidDataException extends Exception { public static class InvalidDataException extends Exception {
@ -227,8 +246,6 @@ public class PgpDecryptVerify {
InputStream clear; InputStream clear;
PGPEncryptedData encryptedData; PGPEncryptedData encryptedData;
currentProgress += 5;
PGPPublicKeyEncryptedData encryptedDataAsymmetric = null; PGPPublicKeyEncryptedData encryptedDataAsymmetric = null;
PGPPBEEncryptedData encryptedDataSymmetric = null; PGPPBEEncryptedData encryptedDataSymmetric = null;
CanonicalizedSecretKey secretEncryptionKey = null; CanonicalizedSecretKey secretEncryptionKey = null;
@ -239,6 +256,7 @@ public class PgpDecryptVerify {
while (it.hasNext()) { while (it.hasNext()) {
Object obj = it.next(); Object obj = it.next();
if (obj instanceof PGPPublicKeyEncryptedData) { if (obj instanceof PGPPublicKeyEncryptedData) {
currentProgress += 2;
updateProgress(R.string.progress_finding_key, currentProgress, 100); updateProgress(R.string.progress_finding_key, currentProgress, 100);
PGPPublicKeyEncryptedData encData = (PGPPublicKeyEncryptedData) obj; PGPPublicKeyEncryptedData encData = (PGPPublicKeyEncryptedData) obj;
@ -269,8 +287,8 @@ public class PgpDecryptVerify {
// allow only specific keys for decryption? // allow only specific keys for decryption?
if (mAllowedKeyIds != null) { if (mAllowedKeyIds != null) {
Log.d(Constants.TAG, "encData.getKeyID():" + encData.getKeyID()); Log.d(Constants.TAG, "encData.getKeyID(): " + encData.getKeyID());
Log.d(Constants.TAG, "allowedKeyIds: " + mAllowedKeyIds); Log.d(Constants.TAG, "mAllowedKeyIds: " + mAllowedKeyIds);
Log.d(Constants.TAG, "masterKeyId: " + masterKeyId); Log.d(Constants.TAG, "masterKeyId: " + masterKeyId);
if (!mAllowedKeyIds.contains(masterKeyId)) { if (!mAllowedKeyIds.contains(masterKeyId)) {
@ -325,6 +343,7 @@ public class PgpDecryptVerify {
} }
if (symmetricPacketFound) { if (symmetricPacketFound) {
currentProgress += 2;
updateProgress(R.string.progress_preparing_streams, currentProgress, 100); updateProgress(R.string.progress_preparing_streams, currentProgress, 100);
PGPDigestCalculatorProvider digestCalcProvider = new JcaPGPDigestCalculatorProviderBuilder() PGPDigestCalculatorProvider digestCalcProvider = new JcaPGPDigestCalculatorProviderBuilder()
@ -336,26 +355,23 @@ public class PgpDecryptVerify {
clear = encryptedDataSymmetric.getDataStream(decryptorFactory); clear = encryptedDataSymmetric.getDataStream(decryptorFactory);
encryptedData = encryptedDataSymmetric; encryptedData = encryptedDataSymmetric;
currentProgress += 5;
} else if (asymmetricPacketFound) { } else if (asymmetricPacketFound) {
currentProgress += 5; currentProgress += 2;
updateProgress(R.string.progress_extracting_key, currentProgress, 100); updateProgress(R.string.progress_extracting_key, currentProgress, 100);
try { try {
if (!secretEncryptionKey.unlock(mPassphrase)) { if (!secretEncryptionKey.unlock(mPassphrase)) {
throw new WrongPassphraseException(); throw new WrongPassphraseException();
} }
} catch(PgpGeneralException e) { } catch (PgpGeneralException e) {
throw new KeyExtractionException(); throw new KeyExtractionException();
} }
currentProgress += 5;
currentProgress += 2;
updateProgress(R.string.progress_preparing_streams, currentProgress, 100); updateProgress(R.string.progress_preparing_streams, currentProgress, 100);
PublicKeyDataDecryptorFactory decryptorFactory = secretEncryptionKey.getDecryptorFactory(); PublicKeyDataDecryptorFactory decryptorFactory = secretEncryptionKey.getDecryptorFactory();
clear = encryptedDataAsymmetric.getDataStream(decryptorFactory); clear = encryptedDataAsymmetric.getDataStream(decryptorFactory);
encryptedData = encryptedDataAsymmetric; encryptedData = encryptedDataAsymmetric;
currentProgress += 5;
} else { } else {
// no packet has been found where we have the corresponding secret key in our db // no packet has been found where we have the corresponding secret key in our db
throw new NoSecretKeyException(); throw new NoSecretKeyException();
@ -369,18 +385,19 @@ public class PgpDecryptVerify {
CanonicalizedPublicKey signingKey = null; CanonicalizedPublicKey signingKey = null;
if (dataChunk instanceof PGPCompressedData) { if (dataChunk instanceof PGPCompressedData) {
currentProgress += 2;
updateProgress(R.string.progress_decompressing_data, currentProgress, 100); updateProgress(R.string.progress_decompressing_data, currentProgress, 100);
PGPObjectFactory fact = new PGPObjectFactory( PGPCompressedData compressedData = (PGPCompressedData) dataChunk;
((PGPCompressedData) dataChunk).getDataStream());
PGPObjectFactory fact = new PGPObjectFactory(compressedData.getDataStream());
dataChunk = fact.nextObject(); dataChunk = fact.nextObject();
plainFact = fact; plainFact = fact;
currentProgress += 10;
} }
PGPOnePassSignature signature = null; PGPOnePassSignature signature = null;
if (dataChunk instanceof PGPOnePassSignatureList) { if (dataChunk instanceof PGPOnePassSignatureList) {
currentProgress += 2;
updateProgress(R.string.progress_processing_signature, currentProgress, 100); updateProgress(R.string.progress_processing_signature, currentProgress, 100);
PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk; PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk;
@ -396,8 +413,7 @@ public class PgpDecryptVerify {
signingKey = signingRing.getPublicKey(sigKeyId); signingKey = signingRing.getPublicKey(sigKeyId);
signatureIndex = i; signatureIndex = i;
} catch (ProviderHelper.NotFoundException e) { } catch (ProviderHelper.NotFoundException e) {
Log.d(Constants.TAG, "key not found!"); Log.d(Constants.TAG, "key not found, trying next signature...");
// try next one...
} }
} }
@ -410,8 +426,8 @@ public class PgpDecryptVerify {
signatureResultBuilder.keyId(signingRing.getMasterKeyId()); signatureResultBuilder.keyId(signingRing.getMasterKeyId());
try { try {
signatureResultBuilder.userId(signingRing.getPrimaryUserIdWithFallback()); signatureResultBuilder.userId(signingRing.getPrimaryUserIdWithFallback());
} catch(PgpGeneralException e) { } catch (PgpGeneralException e) {
Log.d(Constants.TAG, "No primary user id in key " + signingRing.getMasterKeyId()); Log.d(Constants.TAG, "No primary user id in keyring with master key id " + signingRing.getMasterKeyId());
} }
signatureResultBuilder.signatureKeyCertified(signingRing.getVerified() > 0); signatureResultBuilder.signatureKeyCertified(signingRing.getVerified() > 0);
@ -429,56 +445,104 @@ public class PgpDecryptVerify {
} }
dataChunk = plainFact.nextObject(); dataChunk = plainFact.nextObject();
currentProgress += 10;
} }
if (dataChunk instanceof PGPSignatureList) { if (dataChunk instanceof PGPSignatureList) {
// skip
dataChunk = plainFact.nextObject(); dataChunk = plainFact.nextObject();
} }
if (dataChunk instanceof PGPLiteralData) { if (dataChunk instanceof PGPLiteralData) {
currentProgress += 4;
updateProgress(R.string.progress_decrypting, currentProgress, 100); updateProgress(R.string.progress_decrypting, currentProgress, 100);
PGPLiteralData literalData = (PGPLiteralData) dataChunk; PGPLiteralData literalData = (PGPLiteralData) dataChunk;
byte[] buffer = new byte[1 << 16]; // TODO: how to get the real original size?
InputStream dataIn = literalData.getInputStream(); // this is the encrypted size so if we enable compression this value is wrong!
long originalSize = mData.getSize() - mData.getStreamPosition();
if (originalSize < 0) {
originalSize = 0;
}
int startProgress = currentProgress; String originalFilename = literalData.getFileName();
int endProgress = 100; String mimeType = null;
if (literalData.getFormat() == PGPLiteralData.TEXT
|| literalData.getFormat() == PGPLiteralData.UTF8) {
mimeType = "text/plain";
} else {
// TODO: better would be: https://github.com/open-keychain/open-keychain/issues/753
// try to guess from file ending
String extension = MimeTypeMap.getFileExtensionFromUrl(originalFilename);
if (extension != null) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
mimeType = mime.getMimeTypeFromExtension(extension);
}
if (mimeType == null) {
mimeType = URLConnection.guessContentTypeFromName(originalFilename);
}
if (mimeType == null) {
mimeType = "*/*";
}
}
OpenPgpMetadata metadata = new OpenPgpMetadata(
originalFilename,
mimeType,
literalData.getModificationTime().getTime(),
originalSize);
result.setDecryptMetadata(metadata);
Log.d(Constants.TAG, "metadata: " + metadata);
// return here if we want to decrypt the metadata only
if (mDecryptMetadataOnly) {
return result;
}
int endProgress;
if (signature != null) { if (signature != null) {
endProgress = 90; endProgress = 90;
} else if (encryptedData.isIntegrityProtected()) { } else if (encryptedData.isIntegrityProtected()) {
endProgress = 95; endProgress = 95;
} else {
endProgress = 100;
} }
ProgressScaler progressScaler =
new ProgressScaler(mProgressable, currentProgress, endProgress, 100);
int n; InputStream dataIn = literalData.getInputStream();
// TODO: progress calculation is broken here! Try to rework it based on commented code!
// int progress = 0; long alreadyWritten = 0;
long startPos = mData.getStreamPosition(); long wholeSize = mData.getSize() - mData.getStreamPosition();
while ((n = dataIn.read(buffer)) > 0) { int length;
mOutStream.write(buffer, 0, n); byte[] buffer = new byte[1 << 16];
// progress += n; while ((length = dataIn.read(buffer)) > 0) {
mOutStream.write(buffer, 0, length);
// update signature buffer if signature is also present
if (signature != null) { if (signature != null) {
try { try {
signature.update(buffer, 0, n); signature.update(buffer, 0, length);
} catch (SignatureException e) { } catch (SignatureException e) {
Log.d(Constants.TAG, "SIGNATURE_ERROR"); Log.e(Constants.TAG, "SignatureException -> Not a valid signature!", e);
signatureResultBuilder.validSignature(false); signatureResultBuilder.validSignature(false);
signature = null; signature = null;
} }
} }
// TODO: dead code?!
// unknown size, but try to at least have a moving, slowing down progress bar alreadyWritten += length;
// currentProgress = startProgress + (endProgress - startProgress) * progress if (wholeSize > 0) {
// / (progress + 100000); long progress = 100 * alreadyWritten / wholeSize;
if (mData.getSize() - startPos == 0) { // stop at 100% for wrong file sizes...
currentProgress = endProgress; if (progress > 100) {
progress = 100;
}
progressScaler.setProgress((int) progress, 100);
} else { } else {
currentProgress = (int) (startProgress + (endProgress - startProgress) // TODO: slow annealing to fake a progress?
* (mData.getStreamPosition() - startPos) / (mData.getSize() - startPos));
} }
updateProgress(currentProgress, 100);
} }
if (signature != null) { if (signature != null) {
@ -510,8 +574,14 @@ public class PgpDecryptVerify {
} }
} else { } else {
// no integrity check // no integrity check
Log.e(Constants.TAG, "Encrypted data was not integrity protected!"); Log.d(Constants.TAG, "Encrypted data was not integrity protected! MDC packet is missing!");
// TODO: inform user?
// If no valid signature is present:
// Handle missing integrity protection like failed integrity protection!
// The MDC packet can be stripped by an attacker!
if (!signatureResultBuilder.isValidSignature()) {
throw new IntegrityCheckFailedException();
}
} }
updateProgress(R.string.progress_done, 100, 100); updateProgress(R.string.progress_done, 100, 100);
@ -581,8 +651,7 @@ public class PgpDecryptVerify {
signingKey = signingRing.getPublicKey(sigKeyId); signingKey = signingRing.getPublicKey(sigKeyId);
signatureIndex = i; signatureIndex = i;
} catch (ProviderHelper.NotFoundException e) { } catch (ProviderHelper.NotFoundException e) {
Log.d(Constants.TAG, "key not found!"); Log.d(Constants.TAG, "key not found, trying next signature...");
// try next one...
} }
} }
@ -597,8 +666,8 @@ public class PgpDecryptVerify {
signatureResultBuilder.keyId(signingRing.getMasterKeyId()); signatureResultBuilder.keyId(signingRing.getMasterKeyId());
try { try {
signatureResultBuilder.userId(signingRing.getPrimaryUserIdWithFallback()); signatureResultBuilder.userId(signingRing.getPrimaryUserIdWithFallback());
} catch(PgpGeneralException e) { } catch (PgpGeneralException e) {
Log.d(Constants.TAG, "No primary user id in key " + signingRing.getMasterKeyId()); Log.d(Constants.TAG, "No primary user id in key with master key id " + signingRing.getMasterKeyId());
} }
signatureResultBuilder.signatureKeyCertified(signingRing.getVerified() > 0); signatureResultBuilder.signatureKeyCertified(signingRing.getVerified() > 0);

View File

@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.pgp;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import org.openintents.openpgp.OpenPgpMetadata;
import org.openintents.openpgp.OpenPgpSignatureResult; import org.openintents.openpgp.OpenPgpSignatureResult;
public class PgpDecryptVerifyResult implements Parcelable { public class PgpDecryptVerifyResult implements Parcelable {
@ -31,21 +32,22 @@ public class PgpDecryptVerifyResult implements Parcelable {
long mKeyIdPassphraseNeeded; long mKeyIdPassphraseNeeded;
OpenPgpSignatureResult mSignatureResult; OpenPgpSignatureResult mSignatureResult;
OpenPgpMetadata mDecryptMetadata;
public int getStatus() { public int getStatus() {
return mStatus; return mStatus;
} }
public void setStatus(int mStatus) { public void setStatus(int status) {
this.mStatus = mStatus; mStatus = status;
} }
public long getKeyIdPassphraseNeeded() { public long getKeyIdPassphraseNeeded() {
return mKeyIdPassphraseNeeded; return mKeyIdPassphraseNeeded;
} }
public void setKeyIdPassphraseNeeded(long mKeyIdPassphraseNeeded) { public void setKeyIdPassphraseNeeded(long keyIdPassphraseNeeded) {
this.mKeyIdPassphraseNeeded = mKeyIdPassphraseNeeded; mKeyIdPassphraseNeeded = keyIdPassphraseNeeded;
} }
public OpenPgpSignatureResult getSignatureResult() { public OpenPgpSignatureResult getSignatureResult() {
@ -53,7 +55,15 @@ public class PgpDecryptVerifyResult implements Parcelable {
} }
public void setSignatureResult(OpenPgpSignatureResult signatureResult) { public void setSignatureResult(OpenPgpSignatureResult signatureResult) {
this.mSignatureResult = signatureResult; mSignatureResult = signatureResult;
}
public OpenPgpMetadata getDecryptMetadata() {
return mDecryptMetadata;
}
public void setDecryptMetadata(OpenPgpMetadata decryptMetadata) {
mDecryptMetadata = decryptMetadata;
} }
public PgpDecryptVerifyResult() { public PgpDecryptVerifyResult() {
@ -64,6 +74,7 @@ public class PgpDecryptVerifyResult implements Parcelable {
this.mStatus = b.mStatus; this.mStatus = b.mStatus;
this.mKeyIdPassphraseNeeded = b.mKeyIdPassphraseNeeded; this.mKeyIdPassphraseNeeded = b.mKeyIdPassphraseNeeded;
this.mSignatureResult = b.mSignatureResult; this.mSignatureResult = b.mSignatureResult;
this.mDecryptMetadata = b.mDecryptMetadata;
} }
@ -75,6 +86,7 @@ public class PgpDecryptVerifyResult implements Parcelable {
dest.writeInt(mStatus); dest.writeInt(mStatus);
dest.writeLong(mKeyIdPassphraseNeeded); dest.writeLong(mKeyIdPassphraseNeeded);
dest.writeParcelable(mSignatureResult, 0); dest.writeParcelable(mSignatureResult, 0);
dest.writeParcelable(mDecryptMetadata, 0);
} }
public static final Creator<PgpDecryptVerifyResult> CREATOR = new Creator<PgpDecryptVerifyResult>() { public static final Creator<PgpDecryptVerifyResult> CREATOR = new Creator<PgpDecryptVerifyResult>() {
@ -83,6 +95,7 @@ public class PgpDecryptVerifyResult implements Parcelable {
vr.mStatus = source.readInt(); vr.mStatus = source.readInt();
vr.mKeyIdPassphraseNeeded = source.readLong(); vr.mKeyIdPassphraseNeeded = source.readLong();
vr.mSignatureResult = source.readParcelable(OpenPgpSignatureResult.class.getClassLoader()); vr.mSignatureResult = source.readParcelable(OpenPgpSignatureResult.class.getClassLoader());
vr.mDecryptMetadata = source.readParcelable(OpenPgpMetadata.class.getClassLoader());
return vr; return vr;
} }

View File

@ -60,11 +60,11 @@ public class PgpHelper {
} }
} }
public static String getFullVersion(Context context) { public static String getVersionForHeader(Context context) {
if(Preferences.getPreferences(context).getConcealPgpApplication()){ if(Preferences.getPreferences(context).getWriteVersionHeader()){
return "";
} else {
return "OpenKeychain v" + getVersion(context); return "OpenKeychain v" + getVersion(context);
} else {
return null;
} }
} }

View File

@ -230,7 +230,10 @@ public class PgpImportExport {
progress++; progress++;
// Create an output stream // Create an output stream
ArmoredOutputStream arOutStream = new ArmoredOutputStream(outStream); ArmoredOutputStream arOutStream = new ArmoredOutputStream(outStream);
arOutStream.setHeader("Version", PgpHelper.getFullVersion(mContext)); String version = PgpHelper.getVersionForHeader(mContext);
if (version != null) {
arOutStream.setHeader("Version", version);
}
updateProgress(progress * 100 / masterKeyIdsSize, 100); updateProgress(progress * 100 / masterKeyIdsSize, 100);
@ -258,7 +261,10 @@ public class PgpImportExport {
progress++; progress++;
// Create an output stream // Create an output stream
ArmoredOutputStream arOutStream = new ArmoredOutputStream(outStream); ArmoredOutputStream arOutStream = new ArmoredOutputStream(outStream);
arOutStream.setHeader("Version", PgpHelper.getFullVersion(mContext)); String version = PgpHelper.getVersionForHeader(mContext);
if (version != null) {
arOutStream.setHeader("Version", version);
}
updateProgress(progress * 100 / masterKeyIdsSize, 100); updateProgress(progress * 100 / masterKeyIdsSize, 100);

View File

@ -37,6 +37,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ProgressScaler;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
@ -71,6 +72,7 @@ public class PgpSignEncrypt {
private String mSignaturePassphrase; private String mSignaturePassphrase;
private boolean mEncryptToSigner; private boolean mEncryptToSigner;
private boolean mCleartextInput; private boolean mCleartextInput;
private String mOriginalFilename;
private byte[] mNfcSignedHash = null; private byte[] mNfcSignedHash = null;
private Date mNfcCreationTimestamp = null; private Date mNfcCreationTimestamp = null;
@ -105,16 +107,17 @@ public class PgpSignEncrypt {
this.mCleartextInput = builder.mCleartextInput; this.mCleartextInput = builder.mCleartextInput;
this.mNfcSignedHash = builder.mNfcSignedHash; this.mNfcSignedHash = builder.mNfcSignedHash;
this.mNfcCreationTimestamp = builder.mNfcCreationTimestamp; this.mNfcCreationTimestamp = builder.mNfcCreationTimestamp;
this.mOriginalFilename = builder.mOriginalFilename;
} }
public static class Builder { public static class Builder {
// mandatory parameter // mandatory parameter
private ProviderHelper mProviderHelper; private ProviderHelper mProviderHelper;
private String mVersionHeader;
private InputData mData; private InputData mData;
private OutputStream mOutStream; private OutputStream mOutStream;
// optional // optional
private String mVersionHeader = null;
private Progressable mProgressable = null; private Progressable mProgressable = null;
private boolean mEnableAsciiArmorOutput = false; private boolean mEnableAsciiArmorOutput = false;
private int mCompressionId = CompressionAlgorithmTags.UNCOMPRESSED; private int mCompressionId = CompressionAlgorithmTags.UNCOMPRESSED;
@ -126,15 +129,19 @@ public class PgpSignEncrypt {
private String mSignaturePassphrase = null; private String mSignaturePassphrase = null;
private boolean mEncryptToSigner = false; private boolean mEncryptToSigner = false;
private boolean mCleartextInput = false; private boolean mCleartextInput = false;
private String mOriginalFilename = "";
private byte[] mNfcSignedHash = null; private byte[] mNfcSignedHash = null;
private Date mNfcCreationTimestamp = null; private Date mNfcCreationTimestamp = null;
public Builder(ProviderHelper providerHelper, String versionHeader, InputData data, OutputStream outStream) { public Builder(ProviderHelper providerHelper, InputData data, OutputStream outStream) {
this.mProviderHelper = providerHelper; mProviderHelper = providerHelper;
this.mVersionHeader = versionHeader; mData = data;
this.mData = data; mOutStream = outStream;
this.mOutStream = outStream; }
public Builder setVersionHeader(String versionHeader) {
mVersionHeader = versionHeader;
return this;
} }
public Builder setProgressable(Progressable progressable) { public Builder setProgressable(Progressable progressable) {
@ -153,12 +160,12 @@ public class PgpSignEncrypt {
} }
public Builder setEncryptionMasterKeyIds(long[] encryptionMasterKeyIds) { public Builder setEncryptionMasterKeyIds(long[] encryptionMasterKeyIds) {
this.mEncryptionMasterKeyIds = encryptionMasterKeyIds; mEncryptionMasterKeyIds = encryptionMasterKeyIds;
return this; return this;
} }
public Builder setSymmetricPassphrase(String symmetricPassphrase) { public Builder setSymmetricPassphrase(String symmetricPassphrase) {
this.mSymmetricPassphrase = symmetricPassphrase; mSymmetricPassphrase = symmetricPassphrase;
return this; return this;
} }
@ -183,11 +190,13 @@ public class PgpSignEncrypt {
} }
/** /**
* Also encrypt with the signing keyring
*
* @param encryptToSigner * @param encryptToSigner
* @return * @return
*/ */
public Builder setEncryptToSigner(boolean encryptToSigner) { public Builder setEncryptToSigner(boolean encryptToSigner) {
this.mEncryptToSigner = encryptToSigner; mEncryptToSigner = encryptToSigner;
return this; return this;
} }
@ -198,7 +207,12 @@ public class PgpSignEncrypt {
* @return * @return
*/ */
public Builder setCleartextInput(boolean cleartextInput) { public Builder setCleartextInput(boolean cleartextInput) {
this.mCleartextInput = cleartextInput; mCleartextInput = cleartextInput;
return this;
}
public Builder setOriginalFilename(String originalFilename) {
mOriginalFilename = originalFilename;
return this; return this;
} }
@ -278,6 +292,18 @@ public class PgpSignEncrypt {
mEncryptionMasterKeyIds[mEncryptionMasterKeyIds.length - 1] = mSignatureMasterKeyId; mEncryptionMasterKeyIds[mEncryptionMasterKeyIds.length - 1] = mSignatureMasterKeyId;
} }
ArmoredOutputStream armorOut = null;
OutputStream out;
if (mEnableAsciiArmorOutput) {
armorOut = new ArmoredOutputStream(mOutStream);
if (mVersionHeader != null) {
armorOut.setHeader("Version", mVersionHeader);
}
out = armorOut;
} else {
out = mOutStream;
}
/* Get keys for signature generation for later usage */ /* Get keys for signature generation for later usage */
CanonicalizedSecretKey signingKey = null; CanonicalizedSecretKey signingKey = null;
if (enableSignature) { if (enableSignature) {
@ -314,7 +340,7 @@ public class PgpSignEncrypt {
mSignatureHashAlgorithm = supported.getLast(); mSignatureHashAlgorithm = supported.getLast();
} }
} }
updateProgress(R.string.progress_preparing_streams, 5, 100); updateProgress(R.string.progress_preparing_streams, 2, 100);
/* Initialize PGPEncryptedDataGenerator for later usage */ /* Initialize PGPEncryptedDataGenerator for later usage */
PGPEncryptedDataGenerator cPk = null; PGPEncryptedDataGenerator cPk = null;
@ -354,7 +380,7 @@ public class PgpSignEncrypt {
/* Initialize signature generator object for later usage */ /* Initialize signature generator object for later usage */
PGPSignatureGenerator signatureGenerator = null; PGPSignatureGenerator signatureGenerator = null;
if (enableSignature) { if (enableSignature) {
updateProgress(R.string.progress_preparing_signature, 10, 100); updateProgress(R.string.progress_preparing_signature, 4, 100);
try { try {
boolean cleartext = mCleartextInput && mEnableAsciiArmorOutput && !enableEncryption; boolean cleartext = mCleartextInput && mEnableAsciiArmorOutput && !enableEncryption;
@ -366,16 +392,8 @@ public class PgpSignEncrypt {
} }
} }
ArmoredOutputStream armorOut = null; ProgressScaler progressScaler =
OutputStream out; new ProgressScaler(mProgressable, 8, 95, 100);
if (mEnableAsciiArmorOutput) {
armorOut = new ArmoredOutputStream(mOutStream);
armorOut.setHeader("Version", mVersionHeader);
out = armorOut;
} else {
out = mOutStream;
}
PGPCompressedDataGenerator compressGen = null; PGPCompressedDataGenerator compressGen = null;
OutputStream pOut = null; OutputStream pOut = null;
OutputStream encryptionOut = null; OutputStream encryptionOut = null;
@ -383,6 +401,7 @@ public class PgpSignEncrypt {
if (enableEncryption) { if (enableEncryption) {
/* actual encryption */ /* actual encryption */
updateProgress(R.string.progress_encrypting, 8, 100);
encryptionOut = cPk.open(out, new byte[1 << 16]); encryptionOut = cPk.open(out, new byte[1 << 16]);
@ -398,26 +417,25 @@ public class PgpSignEncrypt {
} }
PGPLiteralDataGenerator literalGen = new PGPLiteralDataGenerator(); PGPLiteralDataGenerator literalGen = new PGPLiteralDataGenerator();
// file name not needed, so empty string pOut = literalGen.open(bcpgOut, PGPLiteralData.BINARY, mOriginalFilename, new Date(),
pOut = literalGen.open(bcpgOut, PGPLiteralData.BINARY, "", new Date(),
new byte[1 << 16]); new byte[1 << 16]);
updateProgress(R.string.progress_encrypting, 20, 100);
long progress = 0; long alreadyWritten = 0;
int n; int length;
byte[] buffer = new byte[1 << 16]; byte[] buffer = new byte[1 << 16];
InputStream in = mData.getInputStream(); InputStream in = mData.getInputStream();
while ((n = in.read(buffer)) > 0) { while ((length = in.read(buffer)) > 0) {
pOut.write(buffer, 0, n); pOut.write(buffer, 0, length);
// update signature buffer if signature is requested // update signature buffer if signature is requested
if (enableSignature) { if (enableSignature) {
signatureGenerator.update(buffer, 0, n); signatureGenerator.update(buffer, 0, length);
} }
progress += n; alreadyWritten += length;
if (mData.getSize() != 0) { if (mData.getSize() > 0) {
updateProgress((int) (20 + (95 - 20) * progress / mData.getSize()), 100); long progress = 100 * alreadyWritten / mData.getSize();
progressScaler.setProgress((int) progress, 100);
} }
} }
@ -425,7 +443,7 @@ public class PgpSignEncrypt {
} else if (enableSignature && mCleartextInput && mEnableAsciiArmorOutput) { } else if (enableSignature && mCleartextInput && mEnableAsciiArmorOutput) {
/* cleartext signature: sign-only of ascii text */ /* cleartext signature: sign-only of ascii text */
updateProgress(R.string.progress_signing, 40, 100); updateProgress(R.string.progress_signing, 8, 100);
// write -----BEGIN PGP SIGNED MESSAGE----- // write -----BEGIN PGP SIGNED MESSAGE-----
armorOut.beginClearText(mSignatureHashAlgorithm); armorOut.beginClearText(mSignatureHashAlgorithm);
@ -436,6 +454,7 @@ public class PgpSignEncrypt {
// update signature buffer with first line // update signature buffer with first line
processLine(reader.readLine(), armorOut, signatureGenerator); processLine(reader.readLine(), armorOut, signatureGenerator);
// TODO: progress: fake annealing?
while (true) { while (true) {
String line = reader.readLine(); String line = reader.readLine();
@ -458,7 +477,7 @@ public class PgpSignEncrypt {
} else if (enableSignature && !mCleartextInput) { } else if (enableSignature && !mCleartextInput) {
/* sign-only binary (files/data stream) */ /* sign-only binary (files/data stream) */
updateProgress(R.string.progress_signing, 40, 100); updateProgress(R.string.progress_signing, 8, 100);
InputStream in = mData.getInputStream(); InputStream in = mData.getInputStream();
@ -472,16 +491,22 @@ public class PgpSignEncrypt {
signatureGenerator.generateOnePassVersion(false).encode(bcpgOut); signatureGenerator.generateOnePassVersion(false).encode(bcpgOut);
PGPLiteralDataGenerator literalGen = new PGPLiteralDataGenerator(); PGPLiteralDataGenerator literalGen = new PGPLiteralDataGenerator();
// file name not needed, so empty string pOut = literalGen.open(bcpgOut, PGPLiteralData.BINARY, mOriginalFilename, new Date(),
pOut = literalGen.open(bcpgOut, PGPLiteralData.BINARY, "", new Date(),
new byte[1 << 16]); new byte[1 << 16]);
long alreadyWritten = 0;
int length;
byte[] buffer = new byte[1 << 16]; byte[] buffer = new byte[1 << 16];
int n; while ((length = in.read(buffer)) > 0) {
while ((n = in.read(buffer)) > 0) { pOut.write(buffer, 0, length);
pOut.write(buffer, 0, n);
signatureGenerator.update(buffer, 0, n); signatureGenerator.update(buffer, 0, length);
alreadyWritten += length;
if (mData.getSize() > 0) {
long progress = 100 * alreadyWritten / mData.getSize();
progressScaler.setProgress((int) progress, 100);
}
} }
literalGen.close(); literalGen.close();

View File

@ -204,7 +204,9 @@ public class UncachedKeyRing {
public void encodeArmored(OutputStream out, String version) throws IOException { public void encodeArmored(OutputStream out, String version) throws IOException {
ArmoredOutputStream aos = new ArmoredOutputStream(out); ArmoredOutputStream aos = new ArmoredOutputStream(out);
aos.setHeader("Version", version); if (version != null) {
aos.setHeader("Version", version);
}
aos.write(mRing.getEncoded()); aos.write(mRing.getEncoded());
aos.close(); aos.close();
} }

View File

@ -105,8 +105,9 @@ public class KeychainContract {
public static class KeyRings implements BaseColumns, KeysColumns, UserIdsColumns { public static class KeyRings implements BaseColumns, KeysColumns, UserIdsColumns {
public static final String MASTER_KEY_ID = KeysColumns.MASTER_KEY_ID; public static final String MASTER_KEY_ID = KeysColumns.MASTER_KEY_ID;
public static final String IS_REVOKED = KeysColumns.IS_REVOKED; public static final String IS_REVOKED = KeychainDatabase.Tables.KEYS + "." + KeysColumns.IS_REVOKED;
public static final String VERIFIED = CertsColumns.VERIFIED; public static final String VERIFIED = CertsColumns.VERIFIED;
public static final String IS_EXPIRED = "is_expired";
public static final String HAS_ANY_SECRET = "has_any_secret"; public static final String HAS_ANY_SECRET = "has_any_secret";
public static final String HAS_ENCRYPT = "has_encrypt"; public static final String HAS_ENCRYPT = "has_encrypt";
public static final String HAS_SIGN = "has_sign"; public static final String HAS_SIGN = "has_sign";

View File

@ -271,6 +271,9 @@ public class KeychainProvider extends ContentProvider {
"kE." + Keys.KEY_ID + " AS " + KeyRings.HAS_ENCRYPT); "kE." + Keys.KEY_ID + " AS " + KeyRings.HAS_ENCRYPT);
projectionMap.put(KeyRings.HAS_SIGN, projectionMap.put(KeyRings.HAS_SIGN,
"kS." + Keys.KEY_ID + " AS " + KeyRings.HAS_SIGN); "kS." + Keys.KEY_ID + " AS " + KeyRings.HAS_SIGN);
projectionMap.put(KeyRings.IS_EXPIRED,
"(" + Tables.KEYS + "." + Keys.EXPIRY + " IS NOT NULL AND " + Tables.KEYS + "." + Keys.EXPIRY
+ " < " + new Date().getTime() / 1000 + ") AS " + KeyRings.IS_EXPIRED);
qb.setProjectionMap(projectionMap); qb.setProjectionMap(projectionMap);
// Need this as list so we can search in it // Need this as list so we can search in it

View File

@ -862,7 +862,10 @@ public class ProviderHelper {
UncachedKeyRing keyRing = UncachedKeyRing.decodeFromData(data); UncachedKeyRing keyRing = UncachedKeyRing.decodeFromData(data);
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
keyRing.encodeArmored(bos, PgpHelper.getFullVersion(mContext)); String version = PgpHelper.getVersionForHeader(mContext);
if (version != null) {
keyRing.encodeArmored(bos, version);
}
String armoredKey = bos.toString("UTF-8"); String armoredKey = bos.toString("UTF-8");
Log.d(Constants.TAG, "armoredKey:" + armoredKey); Log.d(Constants.TAG, "armoredKey:" + armoredKey);
@ -925,7 +928,7 @@ public class ProviderHelper {
mContentResolver.insert(uri, contentValueForApiAccounts(accSettings)); mContentResolver.insert(uri, contentValueForApiAccounts(accSettings));
} }
public void updateApiAccount(AccountSettings accSettings, Uri uri) { public void updateApiAccount(Uri uri, AccountSettings accSettings) {
if (mContentResolver.update(uri, contentValueForApiAccounts(accSettings), null, if (mContentResolver.update(uri, contentValueForApiAccounts(accSettings), null,
null) <= 0) { null) <= 0) {
throw new RuntimeException(); throw new RuntimeException();

View File

@ -25,6 +25,7 @@ import android.os.IBinder;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import org.openintents.openpgp.IOpenPgpService; import org.openintents.openpgp.IOpenPgpService;
import org.openintents.openpgp.OpenPgpMetadata;
import org.openintents.openpgp.OpenPgpError; import org.openintents.openpgp.OpenPgpError;
import org.openintents.openpgp.OpenPgpSignatureResult; import org.openintents.openpgp.OpenPgpSignatureResult;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
@ -184,7 +185,13 @@ public class OpenPgpService extends RemoteService {
if (data.hasExtra(OpenPgpApi.EXTRA_PASSPHRASE)) { if (data.hasExtra(OpenPgpApi.EXTRA_PASSPHRASE)) {
passphrase = data.getStringExtra(OpenPgpApi.EXTRA_PASSPHRASE); passphrase = data.getStringExtra(OpenPgpApi.EXTRA_PASSPHRASE);
} else { } else {
passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), accSettings.getKeyId()); try {
passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), accSettings.getKeyId());
} catch (PassphraseCacheService.KeyNotFoundException e) {
// secret key that is set for this account is deleted?
// show account config again!
return getCreateAccountIntent(data, data.getStringExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME));
}
} }
if (passphrase == null) { if (passphrase == null) {
// get PendingIntent for passphrase input, add it to given params and return to client // get PendingIntent for passphrase input, add it to given params and return to client
@ -204,9 +211,9 @@ public class OpenPgpService extends RemoteService {
// sign-only // sign-only
PgpSignEncrypt.Builder builder = new PgpSignEncrypt.Builder( PgpSignEncrypt.Builder builder = new PgpSignEncrypt.Builder(
new ProviderHelper(getContext()), new ProviderHelper(getContext()),
PgpHelper.getFullVersion(getContext()),
inputData, os); inputData, os);
builder.setEnableAsciiArmorOutput(asciiArmor) builder.setEnableAsciiArmorOutput(asciiArmor)
.setVersionHeader(PgpHelper.getVersionForHeader(this))
.setSignatureHashAlgorithm(accSettings.getHashAlgorithm()) .setSignatureHashAlgorithm(accSettings.getHashAlgorithm())
.setSignatureMasterKeyId(accSettings.getKeyId()) .setSignatureMasterKeyId(accSettings.getKeyId())
.setSignaturePassphrase(passphrase) .setSignaturePassphrase(passphrase)
@ -257,6 +264,10 @@ public class OpenPgpService extends RemoteService {
boolean sign) { boolean sign) {
try { try {
boolean asciiArmor = data.getBooleanExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); boolean asciiArmor = data.getBooleanExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
String originalFilename = data.getStringExtra(OpenPgpApi.EXTRA_ORIGINAL_FILENAME);
if (originalFilename == null) {
originalFilename = "";
}
long[] keyIds; long[] keyIds;
if (data.hasExtra(OpenPgpApi.EXTRA_KEY_IDS)) { if (data.hasExtra(OpenPgpApi.EXTRA_KEY_IDS)) {
@ -297,12 +308,13 @@ public class OpenPgpService extends RemoteService {
PgpSignEncrypt.Builder builder = new PgpSignEncrypt.Builder( PgpSignEncrypt.Builder builder = new PgpSignEncrypt.Builder(
new ProviderHelper(getContext()), new ProviderHelper(getContext()),
PgpHelper.getFullVersion(getContext()),
inputData, os); inputData, os);
builder.setEnableAsciiArmorOutput(asciiArmor) builder.setEnableAsciiArmorOutput(asciiArmor)
.setVersionHeader(PgpHelper.getVersionForHeader(this))
.setCompressionId(accSettings.getCompression()) .setCompressionId(accSettings.getCompression())
.setSymmetricEncryptionAlgorithm(accSettings.getEncryptionAlgorithm()) .setSymmetricEncryptionAlgorithm(accSettings.getEncryptionAlgorithm())
.setEncryptionMasterKeyIds(keyIds); .setEncryptionMasterKeyIds(keyIds)
.setOriginalFilename(originalFilename);
if (sign) { if (sign) {
String passphrase; String passphrase;
@ -359,11 +371,18 @@ public class OpenPgpService extends RemoteService {
} }
private Intent decryptAndVerifyImpl(Intent data, ParcelFileDescriptor input, private Intent decryptAndVerifyImpl(Intent data, ParcelFileDescriptor input,
ParcelFileDescriptor output, Set<Long> allowedKeyIds) { ParcelFileDescriptor output, Set<Long> allowedKeyIds,
boolean decryptMetadataOnly) {
try { try {
// Get Input- and OutputStream from ParcelFileDescriptor // Get Input- and OutputStream from ParcelFileDescriptor
InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(input); InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(input);
OutputStream os = new ParcelFileDescriptor.AutoCloseOutputStream(output);
OutputStream os;
if (decryptMetadataOnly) {
os = null;
} else {
os = new ParcelFileDescriptor.AutoCloseOutputStream(output);
}
Intent result = new Intent(); Intent result = new Intent();
try { try {
@ -376,17 +395,24 @@ public class OpenPgpService extends RemoteService {
new ProviderHelper(this), new ProviderHelper(this),
new PgpDecryptVerify.PassphraseCache() { new PgpDecryptVerify.PassphraseCache() {
@Override @Override
public String getCachedPassphrase(long masterKeyId) { public String getCachedPassphrase(long masterKeyId) throws PgpDecryptVerify.NoSecretKeyException {
return PassphraseCacheService.getCachedPassphrase( try {
OpenPgpService.this, masterKeyId); return PassphraseCacheService.getCachedPassphrase(
OpenPgpService.this, masterKeyId);
} catch (PassphraseCacheService.KeyNotFoundException e) {
throw new PgpDecryptVerify.NoSecretKeyException();
}
} }
}, },
inputData, os inputData, os
); );
builder.setAllowSymmetricDecryption(false) // no support for symmetric encryption
.setAllowedKeyIds(allowedKeyIds) // allow only private keys associated with // allow only private keys associated with accounts of this app
// accounts of this app // no support for symmetric encryption
.setPassphrase(passphrase); builder.setPassphrase(passphrase)
.setAllowSymmetricDecryption(false)
.setAllowedKeyIds(allowedKeyIds)
.setDecryptMetadataOnly(decryptMetadataOnly);
PgpDecryptVerifyResult decryptVerifyResult; PgpDecryptVerifyResult decryptVerifyResult;
try { try {
@ -409,8 +435,7 @@ public class OpenPgpService extends RemoteService {
if (PgpDecryptVerifyResult.KEY_PASSHRASE_NEEDED == decryptVerifyResult.getStatus()) { if (PgpDecryptVerifyResult.KEY_PASSHRASE_NEEDED == decryptVerifyResult.getStatus()) {
// get PendingIntent for passphrase input, add it to given params and return to client // get PendingIntent for passphrase input, add it to given params and return to client
return getPassphraseIntent(data, decryptVerifyResult.getKeyIdPassphraseNeeded()); return getPassphraseIntent(data, decryptVerifyResult.getKeyIdPassphraseNeeded());
} else if (PgpDecryptVerifyResult.SYMMETRIC_PASSHRASE_NEEDED == } else if (PgpDecryptVerifyResult.SYMMETRIC_PASSHRASE_NEEDED == decryptVerifyResult.getStatus()) {
decryptVerifyResult.getStatus()) {
throw new PgpGeneralException("Decryption of symmetric content not supported by API!"); throw new PgpGeneralException("Decryption of symmetric content not supported by API!");
} }
@ -434,9 +459,18 @@ public class OpenPgpService extends RemoteService {
} }
} }
if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) >= 4) {
OpenPgpMetadata metadata = decryptVerifyResult.getDecryptMetadata();
if (metadata != null) {
result.putExtra(OpenPgpApi.RESULT_METADATA, metadata);
}
}
} finally { } finally {
is.close(); is.close();
os.close(); if (os != null) {
os.close();
}
} }
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
@ -492,6 +526,7 @@ public class OpenPgpService extends RemoteService {
return result; return result;
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "getKeyImpl", e);
Intent result = new Intent(); Intent result = new Intent();
result.putExtra(OpenPgpApi.RESULT_ERROR, result.putExtra(OpenPgpApi.RESULT_ERROR,
new OpenPgpError(OpenPgpError.GENERIC_ERROR, e.getMessage())); new OpenPgpError(OpenPgpError.GENERIC_ERROR, e.getMessage()));
@ -537,10 +572,15 @@ public class OpenPgpService extends RemoteService {
} }
// version code is required and needs to correspond to version code of service! // version code is required and needs to correspond to version code of service!
if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != OpenPgpApi.API_VERSION) { // History of versions in org.openintents.openpgp.util.OpenPgpApi
// we support 3 and 4
if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 3
&& data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 4) {
Intent result = new Intent(); Intent result = new Intent();
OpenPgpError error = new OpenPgpError OpenPgpError error = new OpenPgpError
(OpenPgpError.INCOMPATIBLE_API_VERSIONS, "Incompatible API versions!"); (OpenPgpError.INCOMPATIBLE_API_VERSIONS, "Incompatible API versions!\n"
+ "used API version: " + data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) + "\n"
+ "supported API versions: 3, 4");
result.putExtra(OpenPgpApi.RESULT_ERROR, error); result.putExtra(OpenPgpApi.RESULT_ERROR, error);
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR);
return result; return result;
@ -588,7 +628,13 @@ public class OpenPgpService extends RemoteService {
Set<Long> allowedKeyIds = Set<Long> allowedKeyIds =
mProviderHelper.getAllKeyIdsForApp( mProviderHelper.getAllKeyIdsForApp(
ApiAccounts.buildBaseUri(currentPkg)); ApiAccounts.buildBaseUri(currentPkg));
return decryptAndVerifyImpl(data, input, output, allowedKeyIds); return decryptAndVerifyImpl(data, input, output, allowedKeyIds, false);
} else if (OpenPgpApi.ACTION_DECRYPT_METADATA.equals(action)) {
String currentPkg = getCurrentCallingPackage();
Set<Long> allowedKeyIds =
mProviderHelper.getAllKeyIdsForApp(
ApiAccounts.buildBaseUri(currentPkg));
return decryptAndVerifyImpl(data, input, output, allowedKeyIds, true);
} else if (OpenPgpApi.ACTION_GET_KEY.equals(action)) { } else if (OpenPgpApi.ACTION_GET_KEY.equals(action)) {
return getKeyImpl(data); return getKeyImpl(data);
} else if (OpenPgpApi.ACTION_GET_KEY_IDS.equals(action)) { } else if (OpenPgpApi.ACTION_GET_KEY_IDS.equals(action)) {

View File

@ -102,7 +102,7 @@ public class AccountSettingsActivity extends ActionBarActivity {
} }
private void save() { private void save() {
new ProviderHelper(this).updateApiAccount(mAccountSettingsFragment.getAccSettings(), mAccountUri); new ProviderHelper(this).updateApiAccount(mAccountUri, mAccountSettingsFragment.getAccSettings());
finish(); finish();
} }

View File

@ -18,11 +18,13 @@
package org.sufficientlysecure.keychain.remote.ui; package org.sufficientlysecure.keychain.remote.ui;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarActivity;
import android.view.View; import android.view.View;
import android.widget.TextView;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
@ -37,6 +39,7 @@ import org.sufficientlysecure.keychain.ui.SelectPublicKeyFragment;
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import java.security.Provider;
import java.util.ArrayList; import java.util.ArrayList;
public class RemoteServiceActivity extends ActionBarActivity { public class RemoteServiceActivity extends ActionBarActivity {
@ -76,10 +79,17 @@ public class RemoteServiceActivity extends ActionBarActivity {
// select pub keys view // select pub keys view
private SelectPublicKeyFragment mSelectFragment; private SelectPublicKeyFragment mSelectFragment;
private ProviderHelper mProviderHelper;
// for ACTION_CREATE_ACCOUNT
boolean mUpdateExistingAccount;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mProviderHelper = new ProviderHelper(this);
handleActions(getIntent(), savedInstanceState); handleActions(getIntent(), savedInstanceState);
} }
@ -94,6 +104,14 @@ public class RemoteServiceActivity extends ActionBarActivity {
final byte[] packageSignature = extras.getByteArray(EXTRA_PACKAGE_SIGNATURE); final byte[] packageSignature = extras.getByteArray(EXTRA_PACKAGE_SIGNATURE);
Log.d(Constants.TAG, "ACTION_REGISTER packageName: " + packageName); Log.d(Constants.TAG, "ACTION_REGISTER packageName: " + packageName);
setContentView(R.layout.api_remote_register_app);
mAppSettingsFragment = (AppSettingsFragment) getSupportFragmentManager().findFragmentById(
R.id.api_app_settings_fragment);
AppSettings settings = new AppSettings(packageName, packageSignature);
mAppSettingsFragment.setAppSettings(settings);
// Inflate a "Done"/"Cancel" custom action bar view // Inflate a "Done"/"Cancel" custom action bar view
ActionBarHelper.setTwoButtonView(getSupportActionBar(), ActionBarHelper.setTwoButtonView(getSupportActionBar(),
R.string.api_register_allow, R.drawable.ic_action_done, R.string.api_register_allow, R.drawable.ic_action_done,
@ -102,8 +120,7 @@ public class RemoteServiceActivity extends ActionBarActivity {
public void onClick(View v) { public void onClick(View v) {
// Allow // Allow
new ProviderHelper(RemoteServiceActivity.this).insertApiApp( mProviderHelper.insertApiApp(mAppSettingsFragment.getAppSettings());
mAppSettingsFragment.getAppSettings());
// give data through for new service call // give data through for new service call
Intent resultData = extras.getParcelable(EXTRA_DATA); Intent resultData = extras.getParcelable(EXTRA_DATA);
@ -120,18 +137,34 @@ public class RemoteServiceActivity extends ActionBarActivity {
} }
} }
); );
setContentView(R.layout.api_remote_register_app);
mAppSettingsFragment = (AppSettingsFragment) getSupportFragmentManager().findFragmentById(
R.id.api_app_settings_fragment);
AppSettings settings = new AppSettings(packageName, packageSignature);
mAppSettingsFragment.setAppSettings(settings);
} else if (ACTION_CREATE_ACCOUNT.equals(action)) { } else if (ACTION_CREATE_ACCOUNT.equals(action)) {
final String packageName = extras.getString(EXTRA_PACKAGE_NAME); final String packageName = extras.getString(EXTRA_PACKAGE_NAME);
final String accName = extras.getString(EXTRA_ACC_NAME); final String accName = extras.getString(EXTRA_ACC_NAME);
setContentView(R.layout.api_remote_create_account);
mAccSettingsFragment = (AccountSettingsFragment) getSupportFragmentManager().findFragmentById(
R.id.api_account_settings_fragment);
TextView text = (TextView) findViewById(R.id.api_remote_create_account_text);
// update existing?
Uri uri = KeychainContract.ApiAccounts.buildByPackageAndAccountUri(packageName, accName);
AccountSettings settings = mProviderHelper.getApiAccountSettings(uri);
if (settings == null) {
// create new account
settings = new AccountSettings(accName);
mUpdateExistingAccount = false;
text.setText(R.string.api_create_account_text);
} else {
// update existing account
mUpdateExistingAccount = true;
text.setText(R.string.api_update_account_text);
}
mAccSettingsFragment.setAccSettings(settings);
// Inflate a "Done"/"Cancel" custom action bar view // Inflate a "Done"/"Cancel" custom action bar view
ActionBarHelper.setTwoButtonView(getSupportActionBar(), ActionBarHelper.setTwoButtonView(getSupportActionBar(),
R.string.api_settings_save, R.drawable.ic_action_done, R.string.api_settings_save, R.drawable.ic_action_done,
@ -145,9 +178,17 @@ public class RemoteServiceActivity extends ActionBarActivity {
mAccSettingsFragment.setErrorOnSelectKeyFragment( mAccSettingsFragment.setErrorOnSelectKeyFragment(
getString(R.string.api_register_error_select_key)); getString(R.string.api_register_error_select_key));
} else { } else {
new ProviderHelper(RemoteServiceActivity.this).insertApiAccount( if (mUpdateExistingAccount) {
KeychainContract.ApiAccounts.buildBaseUri(packageName), Uri baseUri = KeychainContract.ApiAccounts.buildBaseUri(packageName);
mAccSettingsFragment.getAccSettings()); Uri accountUri = baseUri.buildUpon().appendEncodedPath(accName).build();
mProviderHelper.updateApiAccount(
accountUri,
mAccSettingsFragment.getAccSettings());
} else {
mProviderHelper.insertApiAccount(
KeychainContract.ApiAccounts.buildBaseUri(packageName),
mAccSettingsFragment.getAccSettings());
}
// give data through for new service call // give data through for new service call
Intent resultData = extras.getParcelable(EXTRA_DATA); Intent resultData = extras.getParcelable(EXTRA_DATA);
@ -166,13 +207,6 @@ public class RemoteServiceActivity extends ActionBarActivity {
} }
); );
setContentView(R.layout.api_remote_create_account);
mAccSettingsFragment = (AccountSettingsFragment) getSupportFragmentManager().findFragmentById(
R.id.api_account_settings_fragment);
AccountSettings settings = new AccountSettings(accName);
mAccSettingsFragment.setAccSettings(settings);
} else if (ACTION_CACHE_PASSPHRASE.equals(action)) { } else if (ACTION_CACHE_PASSPHRASE.equals(action)) {
long secretKeyId = extras.getLong(EXTRA_SECRET_KEY_ID); long secretKeyId = extras.getLong(EXTRA_SECRET_KEY_ID);
final Intent resultData = extras.getParcelable(EXTRA_DATA); final Intent resultData = extras.getParcelable(EXTRA_DATA);
@ -190,7 +224,8 @@ public class RemoteServiceActivity extends ActionBarActivity {
RemoteServiceActivity.this.finish(); RemoteServiceActivity.this.finish();
} }
}); }
);
} else if (ACTION_SELECT_PUB_KEYS.equals(action)) { } else if (ACTION_SELECT_PUB_KEYS.equals(action)) {
long[] selectedMasterKeyIds = intent.getLongArrayExtra(EXTRA_SELECTED_MASTER_KEY_IDS); long[] selectedMasterKeyIds = intent.getLongArrayExtra(EXTRA_SELECTED_MASTER_KEY_IDS);
@ -286,7 +321,8 @@ public class RemoteServiceActivity extends ActionBarActivity {
RemoteServiceActivity.this.setResult(RESULT_CANCELED); RemoteServiceActivity.this.setResult(RESULT_CANCELED);
RemoteServiceActivity.this.finish(); RemoteServiceActivity.this.finish();
} }
}); }
);
setContentView(R.layout.api_remote_error_message); setContentView(R.layout.api_remote_error_message);

View File

@ -86,6 +86,8 @@ public class KeychainIntentService extends IntentService
public static final String ACTION_DECRYPT_VERIFY = Constants.INTENT_PREFIX + "DECRYPT_VERIFY"; public static final String ACTION_DECRYPT_VERIFY = Constants.INTENT_PREFIX + "DECRYPT_VERIFY";
public static final String ACTION_DECRYPT_METADATA = Constants.INTENT_PREFIX + "DECRYPT_METADATA";
public static final String ACTION_SAVE_KEYRING = Constants.INTENT_PREFIX + "SAVE_KEYRING"; public static final String ACTION_SAVE_KEYRING = Constants.INTENT_PREFIX + "SAVE_KEYRING";
public static final String ACTION_DELETE_FILE_SECURELY = Constants.INTENT_PREFIX public static final String ACTION_DELETE_FILE_SECURELY = Constants.INTENT_PREFIX
@ -241,16 +243,17 @@ public class KeychainIntentService extends IntentService
data.putInt(SELECTED_URI, i); data.putInt(SELECTED_URI, i);
InputData inputData = createEncryptInputData(data); InputData inputData = createEncryptInputData(data);
OutputStream outStream = createCryptOutputStream(data); OutputStream outStream = createCryptOutputStream(data);
String originalFilename = getOriginalFilename(data);
/* Operation */ /* Operation */
PgpSignEncrypt.Builder builder = PgpSignEncrypt.Builder builder =
new PgpSignEncrypt.Builder( new PgpSignEncrypt.Builder(
new ProviderHelper(this), new ProviderHelper(this),
PgpHelper.getFullVersion(this),
inputData, outStream); inputData, outStream);
builder.setProgressable(this); builder.setProgressable(this);
builder.setEnableAsciiArmorOutput(useAsciiArmor) builder.setEnableAsciiArmorOutput(useAsciiArmor)
.setVersionHeader(PgpHelper.getVersionForHeader(this))
.setCompressionId(compressionId) .setCompressionId(compressionId)
.setSymmetricEncryptionAlgorithm( .setSymmetricEncryptionAlgorithm(
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm()) Preferences.getPreferences(this).getDefaultEncryptionAlgorithm())
@ -261,7 +264,8 @@ public class KeychainIntentService extends IntentService
.setSignatureHashAlgorithm( .setSignatureHashAlgorithm(
Preferences.getPreferences(this).getDefaultHashAlgorithm()) Preferences.getPreferences(this).getDefaultHashAlgorithm())
.setSignaturePassphrase( .setSignaturePassphrase(
PassphraseCacheService.getCachedPassphrase(this, signatureKeyId)); PassphraseCacheService.getCachedPassphrase(this, signatureKeyId))
.setOriginalFilename(originalFilename);
// this assumes that the bytes are cleartext (valid for current implementation!) // this assumes that the bytes are cleartext (valid for current implementation!)
if (source == IO_BYTES) { if (source == IO_BYTES) {
@ -302,15 +306,19 @@ public class KeychainIntentService extends IntentService
new ProviderHelper(this), new ProviderHelper(this),
new PgpDecryptVerify.PassphraseCache() { new PgpDecryptVerify.PassphraseCache() {
@Override @Override
public String getCachedPassphrase(long masterKeyId) { public String getCachedPassphrase(long masterKeyId) throws PgpDecryptVerify.NoSecretKeyException {
return PassphraseCacheService.getCachedPassphrase( try {
KeychainIntentService.this, masterKeyId); return PassphraseCacheService.getCachedPassphrase(
KeychainIntentService.this, masterKeyId);
} catch (PassphraseCacheService.KeyNotFoundException e) {
throw new PgpDecryptVerify.NoSecretKeyException();
}
} }
}, },
inputData, outStream); inputData, outStream
builder.setProgressable(this); );
builder.setProgressable(this)
builder.setAllowSymmetricDecryption(true) .setAllowSymmetricDecryption(true)
.setPassphrase(passphrase); .setPassphrase(passphrase);
PgpDecryptVerifyResult decryptVerifyResult = builder.build().execute(); PgpDecryptVerifyResult decryptVerifyResult = builder.build().execute();
@ -325,6 +333,50 @@ public class KeychainIntentService extends IntentService
OtherHelper.logDebugBundle(resultData, "resultData"); OtherHelper.logDebugBundle(resultData, "resultData");
sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData);
} catch (Exception e) {
sendErrorToHandler(e);
}
} else if (ACTION_DECRYPT_METADATA.equals(action)) {
try {
/* Input */
String passphrase = data.getString(DECRYPT_PASSPHRASE);
InputData inputData = createDecryptInputData(data);
/* Operation */
Bundle resultData = new Bundle();
// verifyText and decrypt returning additional resultData values for the
// verification of signatures
PgpDecryptVerify.Builder builder = new PgpDecryptVerify.Builder(
new ProviderHelper(this),
new PgpDecryptVerify.PassphraseCache() {
@Override
public String getCachedPassphrase(long masterKeyId) throws PgpDecryptVerify.NoSecretKeyException {
try {
return PassphraseCacheService.getCachedPassphrase(
KeychainIntentService.this, masterKeyId);
} catch (PassphraseCacheService.KeyNotFoundException e) {
throw new PgpDecryptVerify.NoSecretKeyException();
}
}
},
inputData, null
);
builder.setProgressable(this)
.setAllowSymmetricDecryption(true)
.setPassphrase(passphrase)
.setDecryptMetadataOnly(true);
PgpDecryptVerifyResult decryptVerifyResult = builder.build().execute();
resultData.putParcelable(RESULT_DECRYPT_VERIFY_RESULT, decryptVerifyResult);
/* Output */
OtherHelper.logDebugBundle(resultData, "resultData");
sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData); sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData);
} catch (Exception e) { } catch (Exception e) {
sendErrorToHandler(e); sendErrorToHandler(e);
@ -355,7 +407,7 @@ public class KeychainIntentService extends IntentService
UncachedKeyRing ring = result.getRing(); UncachedKeyRing ring = result.getRing();
providerHelper.saveSecretKeyRing(ring, new ProgressScaler(this, 60, 95, 100)); providerHelper.saveSecretKeyRing(ring, new ProgressScaler(this, 60, 95, 100));
// cache new passphrase // cache new passphrase
if (saveParcel.mNewPassphrase != null) { if (saveParcel.mNewPassphrase != null) {
@ -402,7 +454,7 @@ public class KeychainIntentService extends IntentService
} else { } else {
// get entries from cached file // get entries from cached file
FileImportCache<ParcelableKeyRing> cache = FileImportCache<ParcelableKeyRing> cache =
new FileImportCache<ParcelableKeyRing>(this); new FileImportCache<ParcelableKeyRing>(this);
entries = cache.readCacheIntoList(); entries = cache.readCacheIntoList();
} }
@ -575,7 +627,7 @@ public class KeychainIntentService extends IntentService
CanonicalizedPublicKeyRing publicRing = providerHelper.getCanonicalizedPublicKeyRing(pubKeyId); CanonicalizedPublicKeyRing publicRing = providerHelper.getCanonicalizedPublicKeyRing(pubKeyId);
CanonicalizedSecretKeyRing secretKeyRing = providerHelper.getCanonicalizedSecretKeyRing(masterKeyId); CanonicalizedSecretKeyRing secretKeyRing = providerHelper.getCanonicalizedSecretKeyRing(masterKeyId);
CanonicalizedSecretKey certificationKey = secretKeyRing.getSecretKey(); CanonicalizedSecretKey certificationKey = secretKeyRing.getSecretKey();
if(!certificationKey.unlock(signaturePassphrase)) { if (!certificationKey.unlock(signaturePassphrase)) {
throw new PgpGeneralException("Error extracting key (bad passphrase?)"); throw new PgpGeneralException("Error extracting key (bad passphrase?)");
} }
UncachedKeyRing newRing = certificationKey.certifyUserIds(publicRing, userIds); UncachedKeyRing newRing = certificationKey.certifyUserIds(publicRing, userIds);
@ -728,6 +780,27 @@ public class KeychainIntentService extends IntentService
} }
} }
private String getOriginalFilename(Bundle data) throws PgpGeneralException, FileNotFoundException {
int target = data.getInt(TARGET);
switch (target) {
case IO_BYTES:
return "";
case IO_URI:
Uri providerUri = data.getParcelable(ENCRYPT_INPUT_URI);
return FileHelper.getFilename(this, providerUri);
case IO_URIS:
providerUri = data.<Uri>getParcelableArrayList(ENCRYPT_INPUT_URIS).get(data.getInt(SELECTED_URI));
return FileHelper.getFilename(this, providerUri);
default:
throw new PgpGeneralException("No target choosen!");
}
}
private OutputStream createCryptOutputStream(Bundle data) throws PgpGeneralException, FileNotFoundException { private OutputStream createCryptOutputStream(Bundle data) throws PgpGeneralException, FileNotFoundException {
int target = data.getInt(TARGET); int target = data.getInt(TARGET);
switch (target) { switch (target) {

View File

@ -77,12 +77,24 @@ public class PassphraseCacheService extends Service {
private static final int NOTIFICATION_ID = 1; private static final int NOTIFICATION_ID = 1;
private static final int MSG_PASSPHRASE_CACHE_GET_OKAY = 1;
private static final int MSG_PASSPHRASE_CACHE_GET_KEY_NO_FOUND = 2;
private BroadcastReceiver mIntentReceiver; private BroadcastReceiver mIntentReceiver;
private LongSparseArray<CachedPassphrase> mPassphraseCache = new LongSparseArray<CachedPassphrase>(); private LongSparseArray<CachedPassphrase> mPassphraseCache = new LongSparseArray<CachedPassphrase>();
Context mContext; Context mContext;
public static class KeyNotFoundException extends Exception {
public KeyNotFoundException() {
}
public KeyNotFoundException(String name) {
super(name);
}
}
/** /**
* This caches a new passphrase in memory by sending a new command to the service. An android * This caches a new passphrase in memory by sending a new command to the service. An android
* service is only run once. Thus, when the service is already started, new commands just add * service is only run once. Thus, when the service is already started, new commands just add
@ -115,24 +127,23 @@ public class PassphraseCacheService extends Service {
* @param keyId * @param keyId
* @return passphrase or null (if no passphrase is cached for this keyId) * @return passphrase or null (if no passphrase is cached for this keyId)
*/ */
public static String getCachedPassphrase(Context context, long keyId) { public static String getCachedPassphrase(Context context, long keyId) throws KeyNotFoundException {
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphrase() get masterKeyId for " + keyId); Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphrase() get masterKeyId for " + keyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_GET); intent.setAction(ACTION_PASSPHRASE_CACHE_GET);
final Object mutex = new Object(); final Object mutex = new Object();
final Bundle returnBundle = new Bundle(); final Message returnMessage = Message.obtain();
HandlerThread handlerThread = new HandlerThread("getPassphraseThread"); HandlerThread handlerThread = new HandlerThread("getPassphraseThread");
handlerThread.start(); handlerThread.start();
Handler returnHandler = new Handler(handlerThread.getLooper()) { Handler returnHandler = new Handler(handlerThread.getLooper()) {
@Override @Override
public void handleMessage(Message message) { public void handleMessage(Message message) {
if (message.obj != null) { // copy over result to handle after mutex.wait
String passphrase = ((Bundle) message.obj).getString(EXTRA_PASSPHRASE); returnMessage.what = message.what;
returnBundle.putString(EXTRA_PASSPHRASE, passphrase); returnMessage.copyFrom(message);
}
synchronized (mutex) { synchronized (mutex) {
mutex.notify(); mutex.notify();
} }
@ -156,10 +167,13 @@ public class PassphraseCacheService extends Service {
} }
} }
if (returnBundle.containsKey(EXTRA_PASSPHRASE)) { switch (returnMessage.what) {
return returnBundle.getString(EXTRA_PASSPHRASE); case MSG_PASSPHRASE_CACHE_GET_OKAY:
} else { return returnMessage.getData().getString(EXTRA_PASSPHRASE);
return null; case MSG_PASSPHRASE_CACHE_GET_KEY_NO_FOUND:
throw new KeyNotFoundException();
default:
throw new KeyNotFoundException("should not happen!");
} }
} }
@ -169,7 +183,7 @@ public class PassphraseCacheService extends Service {
* @param keyId * @param keyId
* @return * @return
*/ */
private String getCachedPassphraseImpl(long keyId) { private String getCachedPassphraseImpl(long keyId) throws ProviderHelper.NotFoundException {
// passphrase for symmetric encryption? // passphrase for symmetric encryption?
if (keyId == Constants.key.symmetric) { if (keyId == Constants.key.symmetric) {
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for symmetric encryption"); Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for symmetric encryption");
@ -182,46 +196,41 @@ public class PassphraseCacheService extends Service {
} }
// try to get master key id which is used as an identifier for cached passphrases // try to get master key id which is used as an identifier for cached passphrases
try { Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for masterKeyId " + keyId);
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for masterKeyId " + keyId); CanonicalizedSecretKeyRing key = new ProviderHelper(this).getCanonicalizedSecretKeyRing(
CanonicalizedSecretKeyRing key = new ProviderHelper(this).getCanonicalizedSecretKeyRing( KeychainContract.KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(keyId));
KeychainContract.KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(keyId));
// no passphrase needed? just add empty string and return it, then
if (!key.hasPassphrase()) {
Log.d(Constants.TAG, "Key has no passphrase! Caches and returns empty passphrase!");
try { // no passphrase needed? just add empty string and return it, then
addCachedPassphrase(this, keyId, "", key.getPrimaryUserIdWithFallback()); if (!key.hasPassphrase()) {
} catch (PgpGeneralException e) { Log.d(Constants.TAG, "Key has no passphrase! Caches and returns empty passphrase!");
Log.d(Constants.TAG, "PgpGeneralException occured");
}
return "";
}
// TODO: HACK // TODO: HACK for yubikeys
if (key.getSecretKey().getSecretKey().getS2K().getType() == S2K.GNU_DUMMY_S2K if (key.getSecretKey().getSecretKey().getS2K().getType() == S2K.GNU_DUMMY_S2K
&& key.getSecretKey().getSecretKey().getS2K().getProtectionMode() == 2) { && key.getSecretKey().getSecretKey().getS2K().getProtectionMode() == 2) {
// NFC! // NFC!
return "123456"; return "123456";
} }
// get cached passphrase try {
CachedPassphrase cachedPassphrase = mPassphraseCache.get(keyId); addCachedPassphrase(this, keyId, "", key.getPrimaryUserIdWithFallback());
if (cachedPassphrase == null) { } catch (PgpGeneralException e) {
Log.d(Constants.TAG, "PassphraseCacheService: Passphrase not (yet) cached, returning null"); Log.d(Constants.TAG, "PgpGeneralException occured");
// not really an error, just means the passphrase is not cached but not empty either
return null;
} }
return "";
}
// set it again to reset the cache life cycle // get cached passphrase
Log.d(Constants.TAG, "PassphraseCacheService: Cache passphrase again when getting it!"); CachedPassphrase cachedPassphrase = mPassphraseCache.get(keyId);
addCachedPassphrase(this, keyId, cachedPassphrase.getPassphrase(), cachedPassphrase.getPrimaryUserID()); if (cachedPassphrase == null) {
return cachedPassphrase.getPassphrase(); Log.d(Constants.TAG, "PassphraseCacheService: Passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either
} catch (ProviderHelper.NotFoundException e) {
Log.e(Constants.TAG, "PassphraseCacheService: Passphrase for unknown key was requested!");
return null; return null;
} }
// set it again to reset the cache life cycle
Log.d(Constants.TAG, "PassphraseCacheService: Cache passphrase again when getting it!");
addCachedPassphrase(this, keyId, cachedPassphrase.getPassphrase(), cachedPassphrase.getPrimaryUserID());
return cachedPassphrase.getPassphrase();
} }
/** /**
@ -303,12 +312,19 @@ public class PassphraseCacheService extends Service {
long keyId = intent.getLongExtra(EXTRA_KEY_ID, -1); long keyId = intent.getLongExtra(EXTRA_KEY_ID, -1);
Messenger messenger = intent.getParcelableExtra(EXTRA_MESSENGER); Messenger messenger = intent.getParcelableExtra(EXTRA_MESSENGER);
String passphrase = getCachedPassphraseImpl(keyId);
Message msg = Message.obtain(); Message msg = Message.obtain();
Bundle bundle = new Bundle(); try {
bundle.putString(EXTRA_PASSPHRASE, passphrase); String passphrase = getCachedPassphraseImpl(keyId);
msg.obj = bundle; msg.what = MSG_PASSPHRASE_CACHE_GET_OKAY;
Bundle bundle = new Bundle();
bundle.putString(EXTRA_PASSPHRASE, passphrase);
msg.setData(bundle);
} catch (ProviderHelper.NotFoundException e) {
Log.e(Constants.TAG, "PassphraseCacheService: Passphrase for unknown key was requested!");
msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NO_FOUND;
}
try { try {
messenger.send(msg); messenger.send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {

View File

@ -231,7 +231,14 @@ public class CertifyKeyActivity extends ActionBarActivity implements
*/ */
private void initiateCertifying() { private void initiateCertifying() {
// get the user's passphrase for this key (if required) // get the user's passphrase for this key (if required)
String passphrase = PassphraseCacheService.getCachedPassphrase(this, mMasterKeyId); String passphrase = null;
try {
passphrase = PassphraseCacheService.getCachedPassphrase(this, mMasterKeyId);
} catch (PassphraseCacheService.KeyNotFoundException e) {
Log.e(Constants.TAG, "Key not found!", e);
finish();
return;
}
if (passphrase == null) { if (passphrase == null) {
PassphraseDialogFragment.show(this, mMasterKeyId, PassphraseDialogFragment.show(this, mMasterKeyId,
new Handler() { new Handler() {

View File

@ -23,8 +23,10 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -38,6 +40,7 @@ import org.sufficientlysecure.keychain.pgp.PgpDecryptVerifyResult;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Notify; import org.sufficientlysecure.keychain.util.Notify;
@ -113,7 +116,8 @@ public class DecryptFileFragment extends DecryptFragment {
return; return;
} }
askForOutputFilename(); // askForOutputFilename();
decryptOriginalFilename(null);
} }
private String removeEncryptedAppend(String name) { private String removeEncryptedAppend(String name) {
@ -123,8 +127,13 @@ public class DecryptFileFragment extends DecryptFragment {
return name; return name;
} }
private void askForOutputFilename() { private void askForOutputFilename(String originalFilename) {
String targetName = removeEncryptedAppend(FileHelper.getFilename(getActivity(), mInputUri)); String targetName;
if (!TextUtils.isEmpty(originalFilename)) {
targetName = originalFilename;
} else {
targetName = removeEncryptedAppend(FileHelper.getFilename(getActivity(), mInputUri));
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
File file = new File(mInputUri.getPath()); File file = new File(mInputUri.getPath());
File parentDir = file.exists() ? file.getParentFile() : Constants.Path.APP_DIR; File parentDir = file.exists() ? file.getParentFile() : Constants.Path.APP_DIR;
@ -136,6 +145,82 @@ public class DecryptFileFragment extends DecryptFragment {
} }
} }
private void decryptOriginalFilename(String passphrase) {
Log.d(Constants.TAG, "decryptOriginalFilename");
Intent intent = new Intent(getActivity(), KeychainIntentService.class);
// fill values for this action
Bundle data = new Bundle();
intent.setAction(KeychainIntentService.ACTION_DECRYPT_METADATA);
// data
Log.d(Constants.TAG, "mInputUri=" + mInputUri + ", mOutputUri=" + mOutputUri);
data.putInt(KeychainIntentService.SOURCE, KeychainIntentService.IO_URI);
data.putParcelable(KeychainIntentService.ENCRYPT_INPUT_URI, mInputUri);
data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_URI);
data.putParcelable(KeychainIntentService.ENCRYPT_OUTPUT_URI, mOutputUri);
data.putString(KeychainIntentService.DECRYPT_PASSPHRASE, passphrase);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after decrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(),
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
// get returned data bundle
Bundle returnData = message.getData();
PgpDecryptVerifyResult decryptVerifyResult =
returnData.getParcelable(KeychainIntentService.RESULT_DECRYPT_VERIFY_RESULT);
if (PgpDecryptVerifyResult.KEY_PASSHRASE_NEEDED == decryptVerifyResult.getStatus()) {
showPassphraseDialogForFilename(decryptVerifyResult.getKeyIdPassphraseNeeded());
} else if (PgpDecryptVerifyResult.SYMMETRIC_PASSHRASE_NEEDED ==
decryptVerifyResult.getStatus()) {
showPassphraseDialogForFilename(Constants.key.symmetric);
} else {
// go on...
askForOutputFilename(decryptVerifyResult.getDecryptMetadata().getFilename());
}
}
}
};
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(saveHandler);
intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
// show progress dialog
saveHandler.showProgressDialog(getActivity());
// start service with intent
getActivity().startService(intent);
}
protected void showPassphraseDialogForFilename(long keyId) {
PassphraseDialogFragment.show(getActivity(), keyId,
new Handler() {
@Override
public void handleMessage(Message message) {
if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) {
String passphrase =
message.getData().getString(PassphraseDialogFragment.MESSAGE_DATA_PASSPHRASE);
decryptOriginalFilename(passphrase);
}
}
}
);
}
@Override @Override
protected void decryptStart(String passphrase) { protected void decryptStart(String passphrase) {
Log.d(Constants.TAG, "decryptStart"); Log.d(Constants.TAG, "decryptStart");
@ -161,7 +246,7 @@ public class DecryptFileFragment extends DecryptFragment {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after encrypting is done in KeychainIntentService // Message is received after decrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(), KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(),
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
@ -178,7 +263,7 @@ public class DecryptFileFragment extends DecryptFragment {
if (PgpDecryptVerifyResult.KEY_PASSHRASE_NEEDED == decryptVerifyResult.getStatus()) { if (PgpDecryptVerifyResult.KEY_PASSHRASE_NEEDED == decryptVerifyResult.getStatus()) {
showPassphraseDialog(decryptVerifyResult.getKeyIdPassphraseNeeded()); showPassphraseDialog(decryptVerifyResult.getKeyIdPassphraseNeeded());
} else if (PgpDecryptVerifyResult.SYMMETRIC_PASSHRASE_NEEDED == } else if (PgpDecryptVerifyResult.SYMMETRIC_PASSHRASE_NEEDED ==
decryptVerifyResult.getStatus()) { decryptVerifyResult.getStatus()) {
showPassphraseDialog(Constants.key.symmetric); showPassphraseDialog(Constants.key.symmetric);
} else { } else {
// display signature result in activity // display signature result in activity

View File

@ -339,6 +339,10 @@ public class EditKeyFragment extends LoaderFragment implements
mSaveKeyringParcel.mRevokeUserIds.remove(userId); mSaveKeyringParcel.mRevokeUserIds.remove(userId);
} else { } else {
mSaveKeyringParcel.mRevokeUserIds.add(userId); mSaveKeyringParcel.mRevokeUserIds.add(userId);
// not possible to revoke and change to primary user id
if (mSaveKeyringParcel.mChangePrimaryUserId.equals(userId)) {
mSaveKeyringParcel.mChangePrimaryUserId = null;
}
} }
break; break;
} }
@ -471,8 +475,14 @@ public class EditKeyFragment extends LoaderFragment implements
} }
private void cachePassphraseForEdit() { private void cachePassphraseForEdit() {
mCurrentPassphrase = PassphraseCacheService.getCachedPassphrase(getActivity(), try {
mSaveKeyringParcel.mMasterKeyId); mCurrentPassphrase = PassphraseCacheService.getCachedPassphrase(getActivity(),
mSaveKeyringParcel.mMasterKeyId);
} catch (PassphraseCacheService.KeyNotFoundException e) {
Log.e(Constants.TAG, "Key not found!", e);
getActivity().finish();
return;
}
if (mCurrentPassphrase == null) { if (mCurrentPassphrase == null) {
PassphraseDialogFragment.show(getActivity(), mSaveKeyringParcel.mMasterKeyId, PassphraseDialogFragment.show(getActivity(), mSaveKeyringParcel.mMasterKeyId,
new Handler() { new Handler() {

View File

@ -81,10 +81,6 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
PagerTabStripAdapter mTabsAdapterContent; PagerTabStripAdapter mTabsAdapterContent;
// tabs // tabs
Bundle mAsymmetricFragmentBundle = new Bundle();
Bundle mSymmetricFragmentBundle = new Bundle();
Bundle mMessageFragmentBundle = new Bundle();
Bundle mFileFragmentBundle = new Bundle();
int mSwitchToMode = PAGER_MODE_ASYMMETRIC; int mSwitchToMode = PAGER_MODE_ASYMMETRIC;
int mSwitchToContent = PAGER_CONTENT_MESSAGE; int mSwitchToContent = PAGER_CONTENT_MESSAGE;
@ -93,7 +89,7 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
private static final int PAGER_CONTENT_MESSAGE = 0; private static final int PAGER_CONTENT_MESSAGE = 0;
private static final int PAGER_CONTENT_FILE = 1; private static final int PAGER_CONTENT_FILE = 1;
// model used by message and file fragments // model used by fragments
private long mEncryptionKeyIds[] = null; private long mEncryptionKeyIds[] = null;
private String mEncryptionUserIds[] = null; private String mEncryptionUserIds[] = null;
private long mSigningKeyId = Constants.key.none; private long mSigningKeyId = Constants.key.none;
@ -267,21 +263,23 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
if (isContentMessage()) { if (isContentMessage()) {
data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_BYTES); data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_BYTES);
data.putByteArray(KeychainIntentService.ENCRYPT_MESSAGE_BYTES, mMessage.getBytes()); data.putByteArray(KeychainIntentService.ENCRYPT_MESSAGE_BYTES, mMessage.getBytes());
data.putInt(KeychainIntentService.ENCRYPT_COMPRESSION_ID,
Preferences.getPreferences(this).getDefaultMessageCompression());
} else { } else {
data.putInt(KeychainIntentService.SOURCE, KeychainIntentService.IO_URIS); data.putInt(KeychainIntentService.SOURCE, KeychainIntentService.IO_URIS);
data.putParcelableArrayList(KeychainIntentService.ENCRYPT_INPUT_URIS, mInputUris); data.putParcelableArrayList(KeychainIntentService.ENCRYPT_INPUT_URIS, mInputUris);
data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_URIS); data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_URIS);
data.putParcelableArrayList(KeychainIntentService.ENCRYPT_OUTPUT_URIS, mOutputUris); data.putParcelableArrayList(KeychainIntentService.ENCRYPT_OUTPUT_URIS, mOutputUris);
data.putInt(KeychainIntentService.ENCRYPT_COMPRESSION_ID,
Preferences.getPreferences(this).getDefaultFileCompression());
} }
// Always use armor for messages // Always use armor for messages
data.putBoolean(KeychainIntentService.ENCRYPT_USE_ASCII_ARMOR, mUseArmor || isContentMessage()); data.putBoolean(KeychainIntentService.ENCRYPT_USE_ASCII_ARMOR, mUseArmor || isContentMessage());
// TODO: Only default compression right now...
int compressionId = Preferences.getPreferences(this).getDefaultMessageCompression();
data.putInt(KeychainIntentService.ENCRYPT_COMPRESSION_ID, compressionId);
if (isModeSymmetric()) { if (isModeSymmetric()) {
Log.d(Constants.TAG, "Symmetric encryption enabled!"); Log.d(Constants.TAG, "Symmetric encryption enabled!");
String passphrase = mPassphrase; String passphrase = mPassphrase;
@ -426,7 +424,6 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
if (isModeSymmetric()) { if (isModeSymmetric()) {
// symmetric encryption checks // symmetric encryption checks
if (mPassphrase == null) { if (mPassphrase == null) {
Notify.showNotify(this, R.string.passphrases_do_not_match, Notify.Style.ERROR); Notify.showNotify(this, R.string.passphrases_do_not_match, Notify.Style.ERROR);
return false; return false;
@ -453,20 +450,24 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
return false; return false;
} }
if (mSigningKeyId != 0 && PassphraseCacheService.getCachedPassphrase(this, mSigningKeyId) == null) { try {
PassphraseDialogFragment.show(this, mSigningKeyId, if (mSigningKeyId != 0 && PassphraseCacheService.getCachedPassphrase(this, mSigningKeyId) == null) {
new Handler() { PassphraseDialogFragment.show(this, mSigningKeyId,
@Override new Handler() {
public void handleMessage(Message message) { @Override
if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) { public void handleMessage(Message message) {
// restart if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) {
startEncrypt(); // restart
startEncrypt();
}
} }
} }
} );
);
return false; return false;
}
} catch (PassphraseCacheService.KeyNotFoundException e) {
Log.e(Constants.TAG, "Key not found!", e);
} }
} }
return true; return true;
@ -502,16 +503,12 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
// Handle intent actions // Handle intent actions
handleActions(getIntent()); handleActions(getIntent());
mTabsAdapterMode.addTab(EncryptAsymmetricFragment.class, mTabsAdapterMode.addTab(EncryptAsymmetricFragment.class, null, getString(R.string.label_asymmetric));
mAsymmetricFragmentBundle, getString(R.string.label_asymmetric)); mTabsAdapterMode.addTab(EncryptSymmetricFragment.class, null, getString(R.string.label_symmetric));
mTabsAdapterMode.addTab(EncryptSymmetricFragment.class,
mSymmetricFragmentBundle, getString(R.string.label_symmetric));
mViewPagerMode.setCurrentItem(mSwitchToMode); mViewPagerMode.setCurrentItem(mSwitchToMode);
mTabsAdapterContent.addTab(EncryptMessageFragment.class, mTabsAdapterContent.addTab(EncryptMessageFragment.class, null, getString(R.string.label_message));
mMessageFragmentBundle, getString(R.string.label_message)); mTabsAdapterContent.addTab(EncryptFileFragment.class, null, getString(R.string.label_files));
mTabsAdapterContent.addTab(EncryptFileFragment.class,
mFileFragmentBundle, getString(R.string.label_files));
mViewPagerContent.setCurrentItem(mSwitchToContent); mViewPagerContent.setCurrentItem(mSwitchToContent);
mUseArmor = Preferences.getPreferences(this).getDefaultAsciiArmor(); mUseArmor = Preferences.getPreferences(this).getDefaultAsciiArmor();
@ -603,14 +600,10 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
String textData = extras.getString(EXTRA_TEXT); String textData = extras.getString(EXTRA_TEXT);
long signatureKeyId = extras.getLong(EXTRA_SIGNATURE_KEY_ID); mSigningKeyId = extras.getLong(EXTRA_SIGNATURE_KEY_ID);
long[] encryptionKeyIds = extras.getLongArray(EXTRA_ENCRYPTION_KEY_IDS); mEncryptionKeyIds = extras.getLongArray(EXTRA_ENCRYPTION_KEY_IDS);
// preselect keys given by intent // preselect keys given by intent
mAsymmetricFragmentBundle.putLongArray(EncryptAsymmetricFragment.ARG_ENCRYPTION_KEY_IDS,
encryptionKeyIds);
mAsymmetricFragmentBundle.putLong(EncryptAsymmetricFragment.ARG_SIGNATURE_KEY_ID,
signatureKeyId);
mSwitchToMode = PAGER_MODE_ASYMMETRIC; mSwitchToMode = PAGER_MODE_ASYMMETRIC;
/** /**
@ -618,11 +611,11 @@ public class EncryptActivity extends DrawerActivity implements EncryptActivityIn
*/ */
if (ACTION_ENCRYPT.equals(action) && textData != null) { if (ACTION_ENCRYPT.equals(action) && textData != null) {
// encrypt text based on given extra // encrypt text based on given extra
mMessageFragmentBundle.putString(EncryptMessageFragment.ARG_TEXT, textData); mMessage = textData;
mSwitchToContent = PAGER_CONTENT_MESSAGE; mSwitchToContent = PAGER_CONTENT_MESSAGE;
} else if (ACTION_ENCRYPT.equals(action) && uris != null && !uris.isEmpty()) { } else if (ACTION_ENCRYPT.equals(action) && uris != null && !uris.isEmpty()) {
// encrypt file based on Uri // encrypt file based on Uri
mFileFragmentBundle.putParcelableArrayList(EncryptFileFragment.ARG_URIS, uris); mInputUris = uris;
mSwitchToContent = PAGER_CONTENT_FILE; mSwitchToContent = PAGER_CONTENT_FILE;
} else if (ACTION_ENCRYPT.equals(action)) { } else if (ACTION_ENCRYPT.equals(action)) {
Log.e(Constants.TAG, Log.e(Constants.TAG,

View File

@ -123,14 +123,10 @@ public class EncryptAsymmetricFragment extends Fragment implements EncryptActivi
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
long signatureKeyId = getArguments().getLong(ARG_SIGNATURE_KEY_ID);
long[] encryptionKeyIds = getArguments().getLongArray(ARG_ENCRYPTION_KEY_IDS);
mProviderHelper = new ProviderHelper(getActivity()); mProviderHelper = new ProviderHelper(getActivity());
// preselect keys given by arguments (given by Intent to EncryptActivity) // preselect keys given
preselectKeys(signatureKeyId, encryptionKeyIds, mProviderHelper); preselectKeys();
getLoaderManager().initLoader(1, null, new LoaderManager.LoaderCallbacks<Cursor>() { getLoaderManager().initLoader(1, null, new LoaderManager.LoaderCallbacks<Cursor>() {
@Override @Override
@ -145,24 +141,17 @@ public class EncryptAsymmetricFragment extends Fragment implements EncryptActivi
KeyRings.MASTER_KEY_ID, KeyRings.MASTER_KEY_ID,
KeyRings.KEY_ID, KeyRings.KEY_ID,
KeyRings.USER_ID, KeyRings.USER_ID,
KeyRings.EXPIRY, KeyRings.IS_EXPIRED,
KeyRings.IS_REVOKED,
// can certify info only related to master key
KeyRings.CAN_CERTIFY,
// has sign may be any subkey
KeyRings.HAS_SIGN, KeyRings.HAS_SIGN,
KeyRings.HAS_ANY_SECRET, KeyRings.HAS_ANY_SECRET
KeyRings.HAS_SECRET
}; };
String where = KeyRings.HAS_ANY_SECRET + " = 1"; String where = KeyRings.HAS_ANY_SECRET + " = 1 AND " + KeyRings.HAS_SIGN + " NOT NULL AND "
+ KeyRings.IS_REVOKED + " = 0 AND " + KeyRings.IS_EXPIRED + " = 0";
// Now create and return a CursorLoader that will take care of // Now create and return a CursorLoader that will take care of
// creating a Cursor for the data being displayed. // creating a Cursor for the data being displayed.
return new CursorLoader(getActivity(), baseUri, projection, where, null, null); return new CursorLoader(getActivity(), baseUri, projection, where, null, null);
/*return new CursorLoader(getActivity(), KeyRings.buildUnifiedKeyRingsUri(),
new String[]{KeyRings.USER_ID, KeyRings.KEY_ID, KeyRings.MASTER_KEY_ID, KeyRings.HAS_ANY_SECRET}, SIGN_KEY_SELECTION,
null, null);*/
} }
@Override @Override
@ -194,19 +183,15 @@ public class EncryptAsymmetricFragment extends Fragment implements EncryptActivi
/** /**
* If an Intent gives a signatureMasterKeyId and/or encryptionMasterKeyIds, preselect those! * If an Intent gives a signatureMasterKeyId and/or encryptionMasterKeyIds, preselect those!
*
* @param preselectedSignatureKeyId
* @param preselectedEncryptionKeyIds
*/ */
private void preselectKeys(long preselectedSignatureKeyId, long[] preselectedEncryptionKeyIds, private void preselectKeys() {
ProviderHelper providerHelper) {
// TODO all of this works under the assumption that the first suitable subkey is always used! // TODO all of this works under the assumption that the first suitable subkey is always used!
// not sure if we need to distinguish between different subkeys here? // not sure if we need to distinguish between different subkeys here?
if (preselectedSignatureKeyId != 0) { long signatureKey = mEncryptInterface.getSignatureKey();
if (signatureKey != Constants.key.none) {
try { try {
CachedPublicKeyRing keyring = CachedPublicKeyRing keyring = mProviderHelper.getCachedPublicKeyRing(
providerHelper.getCachedPublicKeyRing( KeyRings.buildUnifiedKeyRingUri(signatureKey));
KeyRings.buildUnifiedKeyRingUri(preselectedSignatureKeyId));
if(keyring.hasAnySecret()) { if(keyring.hasAnySecret()) {
setSignatureKeyId(keyring.getMasterKeyId()); setSignatureKeyId(keyring.getMasterKeyId());
} }
@ -215,10 +200,11 @@ public class EncryptAsymmetricFragment extends Fragment implements EncryptActivi
} }
} }
if (preselectedEncryptionKeyIds != null) { long[] encryptionKeyIds = mEncryptInterface.getEncryptionKeys();
for (long preselectedId : preselectedEncryptionKeyIds) { if (encryptionKeyIds != null) {
for (long preselectedId : encryptionKeyIds) {
try { try {
CachedPublicKeyRing ring = providerHelper.getCachedPublicKeyRing( CachedPublicKeyRing ring = mProviderHelper.getCachedPublicKeyRing(
KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(preselectedId)); KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(preselectedId));
mEncryptKeyView.addObject(mEncryptKeyView.new EncryptionKey(ring)); mEncryptKeyView.addObject(mEncryptKeyView.new EncryptionKey(ring));
} catch (PgpGeneralException e) { } catch (PgpGeneralException e) {

View File

@ -111,8 +111,6 @@ public class EncryptFileFragment extends Fragment implements EncryptActivityInte
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
addInputUris(getArguments().<Uri>getParcelableArrayList(ARG_URIS));
} }
private void addInputUri() { private void addInputUri() {
@ -125,14 +123,6 @@ public class EncryptFileFragment extends Fragment implements EncryptActivityInte
} }
} }
private void addInputUris(List<Uri> uris) {
if (uris != null) {
for (Uri uri : uris) {
addInputUri(uri);
}
}
}
private void addInputUri(Uri inputUri) { private void addInputUri(Uri inputUri) {
if (inputUri == null) { if (inputUri == null) {
return; return;

View File

@ -119,8 +119,8 @@ public class PreferencesActivity extends PreferenceActivity {
initializeAsciiArmor( initializeAsciiArmor(
(CheckBoxPreference) findPreference(Constants.Pref.DEFAULT_ASCII_ARMOR)); (CheckBoxPreference) findPreference(Constants.Pref.DEFAULT_ASCII_ARMOR));
initializeConcealPgpApplication( initializeWriteVersionHeader(
(CheckBoxPreference) findPreference(Constants.Pref.CONCEAL_PGP_APPLICATION)); (CheckBoxPreference) findPreference(Constants.Pref.WRITE_VERSION_HEADER));
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
// Load the legacy preferences headers // Load the legacy preferences headers
@ -263,8 +263,8 @@ public class PreferencesActivity extends PreferenceActivity {
initializeAsciiArmor( initializeAsciiArmor(
(CheckBoxPreference) findPreference(Constants.Pref.DEFAULT_ASCII_ARMOR)); (CheckBoxPreference) findPreference(Constants.Pref.DEFAULT_ASCII_ARMOR));
initializeConcealPgpApplication( initializeWriteVersionHeader(
(CheckBoxPreference) findPreference(Constants.Pref.CONCEAL_PGP_APPLICATION)); (CheckBoxPreference) findPreference(Constants.Pref.WRITE_VERSION_HEADER));
} }
} }
@ -386,12 +386,12 @@ public class PreferencesActivity extends PreferenceActivity {
}); });
} }
private static void initializeConcealPgpApplication(final CheckBoxPreference mConcealPgpApplication) { private static void initializeWriteVersionHeader(final CheckBoxPreference mWriteVersionHeader) {
mConcealPgpApplication.setChecked(sPreferences.getConcealPgpApplication()); mWriteVersionHeader.setChecked(sPreferences.getWriteVersionHeader());
mConcealPgpApplication.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { mWriteVersionHeader.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
mConcealPgpApplication.setChecked((Boolean) newValue); mWriteVersionHeader.setChecked((Boolean) newValue);
sPreferences.setConcealPgpApplication((Boolean) newValue); sPreferences.setWriteVersionHeader((Boolean) newValue);
return false; return false;
} }
}); });

View File

@ -22,17 +22,22 @@ import android.database.Cursor;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader; import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ListView; import android.widget.ListView;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
@ -41,6 +46,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException; import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter;
import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.UserIdInfoDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Notify; import org.sufficientlysecure.keychain.util.Notify;
@ -88,9 +95,30 @@ public class ViewKeyMainFragment extends LoaderFragment implements
PorterDuff.Mode.SRC_IN); PorterDuff.Mode.SRC_IN);
mActionUpdate = view.findViewById(R.id.view_key_action_update); mActionUpdate = view.findViewById(R.id.view_key_action_update);
mUserIds.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
showUserIdInfo(position);
}
});
return root; return root;
} }
private void showUserIdInfo(final int position) {
final boolean isRevoked = mUserIdsAdapter.getIsRevoked(position);
final int isVerified = mUserIdsAdapter.getIsVerified(position);
DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() {
public void run() {
UserIdInfoDialogFragment dialogFragment =
UserIdInfoDialogFragment.newInstance(isRevoked, isVerified);
dialogFragment.show(getActivity().getSupportFragmentManager(), "userIdInfoDialog");
}
});
}
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);

View File

@ -257,6 +257,11 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC
return mCursor.getInt(INDEX_IS_REVOKED) > 0; return mCursor.getInt(INDEX_IS_REVOKED) > 0;
} }
public int getIsVerified(int position) {
mCursor.moveToPosition(position);
return mCursor.getInt(INDEX_VERIFIED);
}
public boolean getIsRevokedPending(int position) { public boolean getIsRevokedPending(int position) {
mCursor.moveToPosition(position); mCursor.moveToPosition(position);
String userId = mCursor.getString(INDEX_USER_ID); String userId = mCursor.getString(INDEX_USER_ID);
@ -280,24 +285,4 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC
return view; return view;
} }
// Disable selection of items for lists without checkboxes, http://stackoverflow.com/a/4075045
@Override
public boolean areAllItemsEnabled() {
if (mCheckStates == null && mSaveKeyringParcel == null) {
return false;
} else {
return super.areAllItemsEnabled();
}
}
// Disable selection of items for lists without checkboxes, http://stackoverflow.com/a/4075045
@Override
public boolean isEnabled(int position) {
if (mCheckStates == null && mSaveKeyringParcel == null) {
return false;
} else {
return super.isEnabled(position);
}
}
} }

View File

@ -0,0 +1,95 @@
/*
* Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sufficientlysecure.keychain.ui.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract;
public class UserIdInfoDialogFragment extends DialogFragment {
private static final String ARG_IS_REVOKED = "is_revoked";
private static final String ARG_IS_VERIFIED = "is_verified";
/**
* Creates new instance of this dialog fragment
*/
public static UserIdInfoDialogFragment newInstance(boolean isRevoked, int isVerified) {
UserIdInfoDialogFragment frag = new UserIdInfoDialogFragment();
Bundle args = new Bundle();
args.putBoolean(ARG_IS_REVOKED, isRevoked);
args.putInt(ARG_IS_VERIFIED, isVerified);
frag.setArguments(args);
return frag;
}
/**
* Creates dialog
*/
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Activity activity = getActivity();
int isVerified = getArguments().getInt(ARG_IS_VERIFIED);
boolean isRevoked = getArguments().getBoolean(ARG_IS_REVOKED);
CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity);
String title;
String message;
if (isRevoked) {
title = getString(R.string.user_id_info_revoked_title);
message = getString(R.string.user_id_info_revoked_text);
} else {
switch (isVerified) {
case KeychainContract.Certs.VERIFIED_SECRET:
title = getString(R.string.user_id_info_verified_title);
message = getString(R.string.user_id_info_verified_text);
break;
case KeychainContract.Certs.VERIFIED_SELF:
title = getString(R.string.user_id_info_not_verified_title);
message = getString(R.string.user_id_info_not_verified_text);
break;
default:
title = getString(R.string.user_id_info_invalid_title);
message = getString(R.string.user_id_info_invalid_text);
break;
}
}
alert.setTitle(title);
alert.setMessage(message);
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dismiss();
}
});
return alert.show();
}
}

View File

@ -22,6 +22,7 @@ import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Rect; import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
@ -45,7 +46,7 @@ import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import java.util.ArrayList; import java.util.ArrayList;
@ -113,9 +114,23 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
((FragmentActivity) getContext()).getSupportLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() { ((FragmentActivity) getContext()).getSupportLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() {
@Override @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) { public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getContext(), KeychainContract.KeyRings.buildUnifiedKeyRingsUri(), // These are the rows that we will retrieve.
new String[]{KeychainContract.KeyRings.HAS_ENCRYPT, KeychainContract.KeyRings.KEY_ID, KeychainContract.KeyRings.USER_ID, KeychainContract.KeyRings.FINGERPRINT}, Uri baseUri = KeyRings.buildUnifiedKeyRingsUri();
null, null, null);
String[] projection = new String[]{
KeyRings._ID,
KeyRings.MASTER_KEY_ID,
KeyRings.KEY_ID,
KeyRings.USER_ID,
KeyRings.FINGERPRINT,
KeyRings.IS_EXPIRED,
KeyRings.HAS_ENCRYPT
};
String where = KeyRings.HAS_ENCRYPT + " NOT NULL AND " + KeyRings.IS_EXPIRED + " = 0 AND "
+ KeyRings.IS_REVOKED + " = 0";
return new CursorLoader(getContext(), baseUri, projection, where, null, null);
} }
@Override @Override
@ -148,10 +163,8 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
ArrayList<EncryptionKey> keys = new ArrayList<EncryptionKey>(); ArrayList<EncryptionKey> keys = new ArrayList<EncryptionKey>();
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
try { try {
if (cursor.getInt(cursor.getColumnIndexOrThrow(KeychainContract.KeyRings.HAS_ENCRYPT)) != 0) { EncryptionKey key = new EncryptionKey(cursor);
EncryptionKey key = new EncryptionKey(cursor); keys.add(key);
keys.add(key);
}
} catch (Exception e) { } catch (Exception e) {
Log.w(Constants.TAG, e); Log.w(Constants.TAG, e);
return; return;
@ -174,10 +187,10 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
} }
public EncryptionKey(Cursor cursor) { public EncryptionKey(Cursor cursor) {
this(cursor.getString(cursor.getColumnIndexOrThrow(KeychainContract.KeyRings.USER_ID)), this(cursor.getString(cursor.getColumnIndexOrThrow(KeyRings.USER_ID)),
cursor.getLong(cursor.getColumnIndexOrThrow(KeychainContract.KeyRings.KEY_ID)), cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.KEY_ID)),
PgpKeyHelper.convertFingerprintToHex( PgpKeyHelper.convertFingerprintToHex(
cursor.getBlob(cursor.getColumnIndexOrThrow(KeychainContract.KeyRings.FINGERPRINT)))); cursor.getBlob(cursor.getColumnIndexOrThrow(KeyRings.FINGERPRINT))));
} }

View File

@ -28,11 +28,13 @@
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:layout_weight="1" /> android:layout_weight="1" />
<View <TextView
android:id="@+id/view_key_action_certify_divider" style="@style/SectionHeader"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="1dip" android:layout_height="0dp"
android:background="?android:attr/listDivider" /> android:layout_marginTop="14dp"
android:text="@string/section_actions"
android:layout_weight="1" />
<LinearLayout <LinearLayout
android:id="@+id/view_key_action_certify" android:id="@+id/view_key_action_certify"
@ -63,13 +65,11 @@
</LinearLayout> </LinearLayout>
<TextView <View
style="@style/SectionHeader" android:id="@+id/view_key_action_certify_divider"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="1dip"
android:layout_marginTop="14dp" android:background="?android:attr/listDivider" />
android:text="@string/section_actions"
android:layout_weight="1" />
<TextView <TextView
android:id="@+id/view_key_action_edit" android:id="@+id/view_key_action_edit"

View File

@ -1,50 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li>
<li>Tim Bray</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -1,156 +0,0 @@
<html>
<head></head>
<body>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>new unified key list</li>
<li>colorized key fingerprint</li>
<li>support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li>
<li>certify user ids</li>
<li>keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li>
<li>search in public key lists</li>
<li>and much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -1,12 +0,0 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Getting started</h2>
<p>First you need a personal secret key. Create one via the option menus in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>Applications</h2>
<p>Several applications support OpenKeychain to encrypt/sign your private communication:<br><img src="apps_k9"><br>K-9 Mail: OpenKeychain support available in current <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: App to send a PGP-signed request to a server to open or close something, e.g. a door</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head></head>
<body>
<h2>Web of Trust</h2>
<p>The Web of Trust describes the part of PGP which deals with creation and bookkeeping of certifications. It provides mechanisms to help the user keep track of who a public key belongs to, and share this information with others; To ensure the privacy of encrypted communication, it is essential to know that the public key you encrypt to belongs to the person you think it does.</p>
<h2>Support in OpenKeychain</h2>
<p>There is only basic support for Web of Trust in OpenKeychain. This is a heavy work in progress and subject to changes in upcoming releases.</p>
<h2>Trust Model</h2>
<p>Trust evaluation is based on the simple assumption that all keys which have secret keys available are trusted. Public keys which contain at least one user id certified by a trusted key will be marked with a green dot in the key listings. It is not (yet) possible to specify trust levels for certificates of other known public keys.</p>
<h2>Certifying keys</h2>
<p>Support for key certification is available, and user ids can be certified individually. It is not yet possible to specify the level of trust or create local and other special types of certificates.</p>
</body>
</html>

View File

@ -1,11 +0,0 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p> <p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Lead developer)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (crypto patches)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>some fixes for regression bugs</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>key certifications (thanks to Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li> <li>New design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>fix decryption of symmetric pgp messages/files</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li> <li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order): Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>new unified key list</li> <li>New unified key list</li>
<li>colorized key fingerprint</li> <li>Colorized key fingerprint</li>
<li>support for keyserver ports</li> <li>Support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li> <li>Deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li> <li>Much more internal work on the API</li>
<li>certify user ids</li> <li>Certify user ids</li>
<li>keyserver query based on machine-readable output</li> <li>Keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li> <li>Lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li> <li>Suggestions for emails on creation of keys</li>
<li>search in public key lists</li> <li>Search in public key lists</li>
<li>and much more improvements and fixes…</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>hotfix for crash when upgrading from old versions</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li> <li>Querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li> <li>Fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li> <li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>new design with navigation drawer</li> <li>New design with navigation drawer</li>
<li>new public key list design</li> <li>New public key list design</li>
<li>new public key view</li> <li>New public key view</li>
<li>bug fixes for importing of keys</li> <li>Bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>lots of bug fixes</li> <li>Lots of bug fixes</li>
<li>new API for developers</li> <li>New API for developers</li>
<li>PRNG bug fix by Google</li> <li>PRNG bug fix by Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>complete redesign</li> <li>Complete redesign</li>
<li>share public keys via qr codes, nfc beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>sign keys</li> <li>Sign keys</li>
<li>upload keys to server</li> <li>Upload keys to server</li>
<li>fixes import issues</li> <li>Fixes import issues</li>
<li>new AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>basic keyserver support</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li> <li>Bugfixes</li>
<li>optimizations</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>fixed problem with signature verification of texts with trailing newline</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>account adding crash on Froyo fixed</li> <li>Account adding crash on Froyo fixed</li>
<li>secure file deletion</li> <li>Secure file deletion</li>
<li>option to delete key file after import</li> <li>Option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li> <li>New options (language, force v3 signatures)</li>
<li>interface changes</li> <li>Interface changes</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>German and Italian translation</li> <li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li> <li>Much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li> <li>New preferences GUI</li>
<li>layout adjustment for localization</li> <li>Layout adjustment for localization</li>
<li>signature bugfix</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>fixed another crash caused by some SDK bug with query builder</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>fixed crashes during encryption/signing and possibly key export</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>filterable key lists</li> <li>Filterable key lists</li>
<li>smarter pre-selection of encryption keys</li> <li>Smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li> <li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li> <li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li> <li>New database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li> <li>Defined Intents and content provider for other apps</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> ist eine OpenPGP-Implementierung für Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> ist eine OpenPGP-Implementierung für Android.</p>
<p>Lizenz: GPLv3+</p> <p>Lizenz: GPLv3+</p>
<h2>Entwickler OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Leitender Entwickler)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (crypto patches)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Entwickler APG 1.x</h2>
<ul>
<li>Thialfihar (Hauptentwickler)</li>
<li>'Senecaso' (QR-Code, Schlüssel signieren, Schlüssel hochladen)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Bibliotheken</h2> <h2>Bibliotheken</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Bibliothek v7 'appcompat'</a> (Apache Lizenz v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Bibliothek v7 'appcompat'</a> (Apache Lizenz v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache Lizenz v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT Lizenz)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache Lizenz v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache Lizenz v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache Lizenz v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 Lizenz)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 Lizenz)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Lizenz v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Lizenz v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Bibliothek</a> (Apache Lizenz v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Lila! (Dominik, Vincent)</li> <li>Lila! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>some fixes for regression bugs</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>Schlüsselzertifikation (Dank an Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Unterstützung für GnuPG teilweisegeheime Schlüssel (Dank an Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>Neues Design für Signaturverifikation</li> <li>New design for signature verification</li>
<li>Nutzerdefinierte Schlüssellänge (Dank an Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>Fehler behoben bei der Teilen-Funktion von anderen Apps</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>behoben: entschlüsseln von symetrischen pgp Nachrichten/Dateien</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>umgestalteter Schlüssel bearbeiten Bildschirm (Dank an Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>neues modernes Design für verschlüsselung/entschlüsselungs Bildschirme</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API Version 3 (mehrfache api accounts, interne fehlerbehebungen, schlüssel suche)</li> <li>OpenPGP API Version 3 (mehrfache api accounts, interne fehlerbehebungen, schlüssel suche)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Neben mehreren kleinen Updates sind eine beachtliche Anzahl von Updates von den folgenden Personen gemacht worden (in alphabetischer Reihenfolge): Neben mehreren kleinen Updates sind eine beachtliche Anzahl von Updates von den folgenden Personen gemacht worden (in alphabetischer Reihenfolge):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>neue vereinheitlichte Schlüssel liste.</li> <li>New unified key list</li>
<li>eingefärbte Schlüssel fingerprints</li> <li>Colorized key fingerprint</li>
<li>Unterstützung für Schlüsselserver </li> <li>Support for keyserver ports</li>
<li>deaktiviert die Möglichkeit schwache Schlüssel zu generieren.</li> <li>Deactivate possibility to generate weak keys</li>
<li>viel mehr interne Arbeit an der API</li> <li>Much more internal work on the API</li>
<li>zertifizieren von Benutzer IDs</li> <li>Certify user ids</li>
<li>Schlüsselserver Anfragen basieren auf Maschinenlesbaren Ausgaben.</li> <li>Keyserver query based on machine-readable output</li>
<li>fixiere Navigationsmenu in Tabletcomputers</li> <li>Lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li> <li>Suggestions for emails on creation of keys</li>
<li>suchen in öffentlichen Schlüssellisten</li> <li>Search in public key lists</li>
<li>und viele weitere Verbesserungen und Fehlerbehebungen...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>schnelle Fehlerbehebung für Abstürze sobald man von einer alten Version geupdatet hat.</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>entfernung von unnötigen exporten von öffentlichen Schlüsseln, wenn man den geheimen Schlüssel exportiert. (Dank an Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fehlerbehebung: Einstellen des Ablaufdatums von Schlüsseln (Dank an Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>mehr interne Fehlerbehebungen wenn man Schlüssel bearbeitet (Dank an Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Suchzugriff auf die Schlüsselserver direkt vom Importieren Bildschirm</li> <li>Querying keyservers directly from the import screen</li>
<li>Fehlerbehebung beim Layout und Dialogstil auf Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Absturz bei leeren Nutzer IDs behoben </li> <li>Fix crash on keys with empty user ids</li>
<li>Fehlerbehebung von Abstürzen und leeren Listen, wenn man vom signieren Bildschirm zurückkehrt.</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (Kryptographie Bibliothek) upgedatet von 1.47 auf 1.50 und vom Quellcode kompiliert.</li> <li>Bouncy Castle (Kryptographie Bibliothek) upgedatet von 1.47 auf 1.50 und vom Quellcode kompiliert.</li>
<li>Fehlerbehebung vom hochladen von Schlüsseln vom signieren Bildschirm.</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>neues Design mit Naivgationsmenu</li> <li>New design with navigation drawer</li>
<li>Neus Design für die Liste der öffentlichen Schlüssel</li> <li>New public key list design</li>
<li>Neue Ansicht für öffentliche Schlüssel</li> <li>New public key view</li>
<li>Fehler beim Schlüsselimport behoben</li> <li>Bug fixes for importing of keys</li>
<li>Schlüssel Cross-Zertifizierung (Dank an Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>richtiges händling von UTF-8 Passwörtern (Danke an Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>Erste Version mit neuen Sprachen (Danke an die Mitwirkenden bei Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>teilen von schlüsseln per QR-Codes behoben und verbessert</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>paket signatur verifizierung für die API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>Viele Fehler behoben</li> <li>Lots of bug fixes</li>
<li>Neue API für Entwickler</li> <li>New API for developers</li>
<li>PRNG Bugfix von Google</li> <li>PRNG Bugfix von Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>Komlett neu designd</li> <li>Complete redesign</li>
<li>Öffentliche Schlüssel teilen via QR Code, NFC Beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>Schlüssel signieren</li> <li>Sign keys</li>
<li>Schlüssel auf den Server hochladen</li> <li>Upload keys to server</li>
<li>Importprobleme behoben</li> <li>Fixes import issues</li>
<li>neue AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>Grundlegende Schlüsselserverunterstützung</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>mehr Auswahlmöglichkeiten für den Passwortcache: 1, 2, 4, 8, Stunden</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>Übersetzungen: norwegisch (Danke, Sander Danielsen), chinesisch (danke, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Fehlerbehebungen</li> <li>Bugfixes</li>
<li>Optimierungen</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>Fehlerbehebung bei Problemen mit der Signatur verifizierung von Texten mit folgender neuer Zeile.</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>weitere Optionen für die Time-to-live des Passphrasencaches (20, 40, 60 mins)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>crash beim Hinzufügen eines Kontos auf Froyo repariert</li> <li>Account adding crash on Froyo fixed</li>
<li>sichere Dateilöschung</li> <li>Secure file deletion</li>
<li>Option, um Schlüsseldatei nach dem Import zu löschen</li> <li>Option to delete key file after import</li>
<li>Streamverschlüsselung/-entschlüsselung (Galerie, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>neue Optionen (Sprache, v3-Unterschriften erzwingen)</li> <li>New options (language, force v3 signatures)</li>
<li>Interfaceänderungen</li> <li>Interface changes</li>
<li>Fehlerbehebungen</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>Deutsche und Italienische Übersetzung</li> <li>Deutsche und Italienische Übersetzung</li>
<li>viel kleineres Paket, dank reduzierter BC Quellen</li> <li>Much smaller package, due to reduced BC sources</li>
<li>Neues Einstellungs-GUI</li> <li>New preferences GUI</li>
<li>Lay-Out-Anpassung für die Lokalisierung</li> <li>Layout adjustment for localization</li>
<li>Fehler bei Signatur behoben</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>Einen anderen crash behoben, verursacht von irgendeinen SDK bug mit dem query builder.</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>Absturz während der Verschlüsselung/Signierung und möglicherweise Schlüsselexport behoben.</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>Filterbare Schlüsselliste</li> <li>Filterable key lists</li>
<li>leichtere vorauswahl von Verschlüsselungsschlüsseln</li> <li>Smarter pre-selection of encryption keys</li>
<li>neues Intent händling für VIEW und SEND, erlaubt es Dateien zu ver-/entschlüsseln außerhalb des Dateimanagers.</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fehlerbehebungen und Extras (Schlüssel vorauswahl) für K-9 Mail, neue Beta Versionen verfügbar.</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>K-9 Mail integration, APG unterstützt beta build von K-9 Mail</li> <li>K-9 Mail integration, APG unterstützt beta build von K-9 Mail</li>
<li>Unterstützung von mehr Filemanagern (einschließlich ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slowenische Übersetzung</li> <li>Slowenische Übersetzung</li>
<li>Neue Datenbank, viel schneller, weniger Speicherbedarf</li> <li>New database, much faster, less memory usage</li>
<li>definierte intents und content provider für andere Apps</li> <li>Defined Intents and content provider for other apps</li>
<li>Fehlerbehebungen</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,50 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li>
<li>Tim Bray</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -1,156 +0,0 @@
<html>
<head></head>
<body>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>new unified key list</li>
<li>colorized key fingerprint</li>
<li>support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li>
<li>certify user ids</li>
<li>keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li>
<li>search in public key lists</li>
<li>and much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -1,12 +0,0 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Getting started</h2>
<p>First you need a personal secret key. Create one via the option menus in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>Applications</h2>
<p>Several applications support OpenKeychain to encrypt/sign your private communication:<br><img src="apps_k9"><br>K-9 Mail: OpenKeychain support available in current <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: App to send a PGP-signed request to a server to open or close something, e.g. a door</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head></head>
<body>
<h2>Web of Trust</h2>
<p>The Web of Trust describes the part of PGP which deals with creation and bookkeeping of certifications. It provides mechanisms to help the user keep track of who a public key belongs to, and share this information with others; To ensure the privacy of encrypted communication, it is essential to know that the public key you encrypt to belongs to the person you think it does.</p>
<h2>Support in OpenKeychain</h2>
<p>There is only basic support for Web of Trust in OpenKeychain. This is a heavy work in progress and subject to changes in upcoming releases.</p>
<h2>Trust Model</h2>
<p>Trust evaluation is based on the simple assumption that all keys which have secret keys available are trusted. Public keys which contain at least one user id certified by a trusted key will be marked with a green dot in the key listings. It is not (yet) possible to specify trust levels for certificates of other known public keys.</p>
<h2>Certifying keys</h2>
<p>Support for key certification is available, and user ids can be certified individually. It is not yet possible to specify the level of trust or create local and other special types of certificates.</p>
</body>
</html>

View File

@ -1,11 +0,0 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> es una implementación de OpenPGP para Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> es una implementación de OpenPGP para Android.</p>
<p>Licencia: GPLv3+</p> <p>Licencia: GPLv3+</p>
<h2>Desarrolladores OpenKeychain</h2> <h2>Desarrolladores</h2>
<ul> <ul>
<li>Dominik Schürmann (Desarrollador principal)</li> <li>Dominik Schürmann (Mantenedor)</li>
<li>Ash Hughes (Parches cryptográficos)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Desarrolladores de APG 1.x</h2>
<ul>
<li>Thialfihar (Desarrollador principal)</li>
<li>'Senecaso' (Código QR, clave de firma, carga de clave)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Librerías</h2> <h2>Librerías</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Licencia Apache v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Licencia Apache v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licencia Apache v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Licencia Apache v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (Licencia MIT)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licencia Apache v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Licencia Apache v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Licencia Apache v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licencia MIT X11)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licencia MIT X11)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencia Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencia Apache v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Librería Android AppMsg</a> (Licencia Apache v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>Se han reparado tantos fallos en esta versión que vamos a concentrarnos en las principales características nuevas</li>
<li>Edición de clave: Tremendo nuevo diseño, revocación de clave</li>
<li>Importación de clave: Impresionante nuevo diseño, conexiones seguras al servidor de claves vía hkps, el servidor de claves resuelve mediante registros DNS SRV</li>
<li>Nueva pantalla de primer inicio</li>
<li>Nueva pantalla de creación de clave: Autocompletado del nombre y correo electrónico basado en sus cuentas Android personales</li>
<li>Cifrado de fichero: Pasmante nuevo diseño, soporte para cifrar múltiples ficheros.</li>
<li>Nuevos iconos para mostrar el estado de la clave (por Brennan Novak)</li>
<li>Importante reparacion de fallo: Ahora es posible la importación de grandes colecciones de claves desde un fichero</li>
<li>Notificación que muestra las frases contraseña almacenadas en caché</li>
</ul>
<p>Esta versión no sería posible sin el trabajo de Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>algunas reparaciones para fallos recurrentes</li> <li>Algunas reparaciones para fallos regresivos (reaparecidos)</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>certificaciones de clave (gracias a Vincent Breitmoser)</li> <li>Certificaciones de clave (gracias a Vincent Breitmoser)</li>
<li>soporte para claves secretas parciales de GnuPG (gracias a Vincent Breitmoser)</li> <li>Soporte para claves secretas parciales de GnuPG (gracias a Vincent Breitmoser)</li>
<li>nuevo diseño para la verificación de firma</li> <li>Nuevo diseño para verificación de firma</li>
<li>tamaño de clave personalizado (gracias a Greg Witczak)</li> <li>Tamaño de clave personalizado (gracias a Greg Witczak)</li>
<li>reparada funcionalidad-compartir desde otras aplicaciones</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>corregido descifrado de mensajes/ficheros con pgp simétrico</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>rediseñada la pantalla de edición de claves (gracias a Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>diseño más moderno para las pantallas de cifrado/descifrado</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API versión 3 (múltiples cuentas API, reparaciones internas, comprobación de claves)</li> <li>OpenPGP API versión 3 (múltiples cuentas API, reparaciones internas, comprobación de claves)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Además de varios parches pequeños, un notable número de correcciones fueron hechas por las siguientes personas (en orden alfabético): Además de varios parches pequeños, un notable número de correcciones fueron hechas por las siguientes personas (en orden alfabético):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>nueva lista unificada de claves</li> <li>New unified key list</li>
<li>huella digital de la clave coloreada</li> <li>Colorized key fingerprint</li>
<li>compatibilidad con puertos del servidor de claves</li> <li>Support for keyserver ports</li>
<li>desactivar la posibilidad de generar claves débiles</li> <li>Deactivate possibility to generate weak keys</li>
<li>mucho más trabajo en el interior de la API</li> <li>Much more internal work on the API</li>
<li>certificar las IDs de usuario</li> <li>Certify user ids</li>
<li>consulta al servidor de claves basadas en lecturas mecánicas</li> <li>Keyserver query based on machine-readable output</li>
<li>cerrar navigation drawer en tabletas</li> <li>Lock navigation drawer on tablets</li>
<li>sugerencias para emails en la creación de claves</li> <li>Suggestions for emails on creation of keys</li>
<li>buscar en las listas de claves públicas</li> <li>Search in public key lists</li>
<li>y muchas más mejoras y correcciones...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>corrección del fallo cuando se actualiza desde versiones anteriores</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>elimina la exportación innecesaria de claves públicas cuando se exporta la clave secreta (gracias a Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>corrige la configuración de la fecha de caducidad en las claves (gracias a Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>más correcciones internas cuando se editan claves (gracias a Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>consultar los servidores de claves directamente desde la ventana de importación</li> <li>Querying keyservers directly from the import screen</li>
<li>corrige el diseño y estilo de mensajes en Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>corrige error en claves con IDs de usuario vacías</li> <li>Fix crash on keys with empty user ids</li>
<li>corrige fallo y listados vacíos cuando se regresa desde la pantalla de firma</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (librería criptográfica) actualizada de 1.47 a 1.50 y compilada desde la fuente</li> <li>Bouncy Castle (librería criptográfica) actualizada de 1.47 a 1.50 y compilada desde la fuente</li>
<li>corrige la carga de la clave desde la pantalla de firma</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>nuevo diseño con Navigation Drawer</li> <li>New design with navigation drawer</li>
<li>nuevo diseño de la lista de clave pública</li> <li>New public key list design</li>
<li>nueva vista de la clave pública</li> <li>New public key view</li>
<li>correcciones en la importación de claves</li> <li>Bug fixes for importing of keys</li>
<li>clave de certificación cruzada (gracias a Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>manejo correcto de las contraseñas UTF-8 (gracias a Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>primera versión con nuevos idiomas (gracias a los colaboradores en Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>compartir claves a través de códigos QR corregido y mejorado</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>verificación por API del paquete de firma</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>corrección de muchos bugs</li> <li>Lots of bug fixes</li>
<li>nueva API para desarrolladores</li> <li>New API for developers</li>
<li>corrección del bug PRNG por Google</li> <li>corrección del bug PRNG por Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>completo rediseño</li> <li>Complete redesign</li>
<li>compartir claves públicas a través de códigos QR, NFC, Beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>claves de firma</li> <li>Sign keys</li>
<li>cargar claves al servidor</li> <li>Upload keys to server</li>
<li>corrige problemas importantes</li> <li>Fixes import issues</li>
<li>nueva API AIDL</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>compatibilidad básica de los servidores de claves</li> <li>Basic keyserver support</li>
<li>app-a-sd</li> <li>App2sd</li>
<li>más opciones para la caché de la frase de contraseña: 1, 2, 4, 8 horas</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>traducciones: noruego (gracias, Sander Danielsen), chino (gracias, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>correcciones de errores</li> <li>Bugfixes</li>
<li>optimizaciones</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>corregido el problema con la verificación de firma de textos que arrastran a una nueva línea</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>más opciones para el tiempo de la caché de la frase de contraseña hasta ahora (20, 40, 60 mins)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>corregido el problema al añadir cuentas en Froyo</li> <li>Account adding crash on Froyo fixed</li>
<li>borrado seguro de archivo</li> <li>Secure file deletion</li>
<li>opción para borrar el archivo de clave después de importarlo</li> <li>Option to delete key file after import</li>
<li>flujo de cifrado/descifrado (galería, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>nuevas opciones (idioma, forzar firmas v3)</li> <li>New options (language, force v3 signatures)</li>
<li>cambios en la interfaz</li> <li>Interface changes</li>
<li>correcciones de errores</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>traducciones a alemán e italiano</li> <li>traducciones a alemán e italiano</li>
<li>paquete de mucho menos tamaño, debido a fuentes BC reducidas</li> <li>Much smaller package, due to reduced BC sources</li>
<li>nuevas preferencias en la GUI</li> <li>New preferences GUI</li>
<li>ajuste del diseño para localización</li> <li>Layout adjustment for localization</li>
<li>corrección de error en la firma</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>corregido otro error causado por algún bug en el SDK con el constructor de consultas</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>corregidos los errores durante el cifrado/firma y probablemente en la exportación de la clave</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>listas de claves con filtro</li> <li>Filterable key lists</li>
<li>preselección de claves de cifrado más inteligente</li> <li>Smarter pre-selection of encryption keys</li>
<li>nuevo intento en el manejo para VER y ENVIAR, permite que los archivos sean cifrados/descifrados fuera de los gestores de archivos</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>corrige y añade características (preselección de clave) para K-9 Mail, nueva compilación disponible</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>integración con K-9 Mail, APG compatible con la compilación beta de K-9 Mail</li> <li>integración con K-9 Mail, APG compatible con la compilación beta de K-9 Mail</li>
<li>compatibilidad para más gestores de archivos (incluyendo ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>traducción al esloveno</li> <li>traducción al esloveno</li>
<li>nueva base de datos, más rápida, con menos demanda de memoria</li> <li>New database, much faster, less memory usage</li>
<li>definidos los intentos y el proveedor de contenido para otras aplicaciones</li> <li>Defined Intents and content provider for other apps</li>
<li>correcciones de errores</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p> <p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Lead developer)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (crypto patches)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>some fixes for regression bugs</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>key certifications (thanks to Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li> <li>New design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>fix decryption of symmetric pgp messages/files</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li> <li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order): Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>new unified key list</li> <li>New unified key list</li>
<li>colorized key fingerprint</li> <li>Colorized key fingerprint</li>
<li>support for keyserver ports</li> <li>Support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li> <li>Deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li> <li>Much more internal work on the API</li>
<li>certify user ids</li> <li>Certify user ids</li>
<li>keyserver query based on machine-readable output</li> <li>Keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li> <li>Lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li> <li>Suggestions for emails on creation of keys</li>
<li>search in public key lists</li> <li>Search in public key lists</li>
<li>and much more improvements and fixes…</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>hotfix for crash when upgrading from old versions</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li> <li>Querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li> <li>Fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li> <li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>new design with navigation drawer</li> <li>New design with navigation drawer</li>
<li>new public key list design</li> <li>New public key list design</li>
<li>new public key view</li> <li>New public key view</li>
<li>bug fixes for importing of keys</li> <li>Bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>lots of bug fixes</li> <li>Lots of bug fixes</li>
<li>new API for developers</li> <li>New API for developers</li>
<li>PRNG bug fix by Google</li> <li>PRNG bug fix by Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>complete redesign</li> <li>Complete redesign</li>
<li>share public keys via qr codes, nfc beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>sign keys</li> <li>Sign keys</li>
<li>upload keys to server</li> <li>Upload keys to server</li>
<li>fixes import issues</li> <li>Fixes import issues</li>
<li>new AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>basic keyserver support</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li> <li>Bugfixes</li>
<li>optimizations</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>fixed problem with signature verification of texts with trailing newline</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>account adding crash on Froyo fixed</li> <li>Account adding crash on Froyo fixed</li>
<li>secure file deletion</li> <li>Secure file deletion</li>
<li>option to delete key file after import</li> <li>Option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li> <li>New options (language, force v3 signatures)</li>
<li>interface changes</li> <li>Interface changes</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>German and Italian translation</li> <li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li> <li>Much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li> <li>New preferences GUI</li>
<li>layout adjustment for localization</li> <li>Layout adjustment for localization</li>
<li>signature bugfix</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>fixed another crash caused by some SDK bug with query builder</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>fixed crashes during encryption/signing and possibly key export</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>filterable key lists</li> <li>Filterable key lists</li>
<li>smarter pre-selection of encryption keys</li> <li>Smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li> <li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li> <li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li> <li>New database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li> <li>Defined Intents and content provider for other apps</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> est une implémentation d'OpenPGP pour Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> est une implémentation d'OpenPGP pour Android.</p>
<p>Licence : GPLv3+</p> <p>Licence : GPLv3+</p>
<h2>Les développeurs d'OpenKeychain</h2> <h2>Développeurs</h2>
<ul> <ul>
<li>Dominik Schürmann (développeur principal)</li> <li>Dominik Schürmann (mainteneur)</li>
<li>Ash Hughes (correctif crypto)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar « kalkin » Gadimov (interface utilisateur)</li> <li>Bahtiar « kalkin » Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>« mar-v-in »</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>« 'Senecaso »</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Les développeurs d'APG 1.x</h2>
<ul>
<li>Thialfihar (développeur principal)</li>
<li>« Senecaso » (Code QR, signer/téléverser la clef)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Bibliothèques</h2> <h2>Bibliothèques</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Bibliothèque de soutien Android v7 « appcompat »</a> (Licence Apache v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Bibliothèque de soutien Android v7 « appcompat »</a> (Licence Apache v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licence Apache v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Licence Apache v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> ( Licence MIT)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (License Apache v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (License Apache v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (License Apache v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licence Apache v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Licence Apache v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Licence Apache v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licence MIT X11)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licence MIT X11)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licence Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licence Apache v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Bibliothèque Android AppMsg</a> (Licence Apache v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>Tellement de bogues ont été réglés dans cette version que nous nous concentrons sur les nouvelles caractéristiques principales.</li>
<li>Modification des clefs : nouvelle et superbe conception, révocations des clefs </li>
<li>Importation des clefs : nouvelle et superbe conception, connexion sécurisé aux serveurs de clefs par hkps, résolution des serveurs de clefs par transactions DNS SRV</li>
<li>Nouvel écran de premier lancement</li>
<li>Nouvel écran de création de clef : autoremplissage du nom et du courriel d'après vos coordonnées Android</li>
<li>Chiffrement des fichiers : nouvelle et superbe conception, prise en charge du chiffrement de fichiers multiples</li>
<li>Nouvelles icônes d'état des clefs (par Brennan Novak)</li>
<li>Correctif important de bogue : l'importation de grandes collections de clefs à partir d'un fichier est maintenant possible</li>
<li>Notification montrant les phrases de passe en cache</li>
</ul>
<p>Cette version ne serait pas possible sans le travail de Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Violet ! (Dominik, Vincent)</li> <li>Violet ! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>quelques correctifs de bogues de régression</li> <li>Quelques correctifs de bogues de régression</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>certifications des clefs (merci à Vincent Breitmoser)</li> <li>Certifications des clefs (merci à Vincent Breitmoser)</li>
<li>prise en charge des clefs secrètes partielles de GnuPG (merci à Vincent Breitmoser)</li> <li>Prise en charge clefs secrètes partielles de GnuPG (merci à Vincent Breitmoser)</li>
<li>nouvelle conception de la vérification des signatures</li> <li>Nouvelle conception de la vérification de signatures</li>
<li>longueur de clef personnalisée (merci à Greg Witczak)</li> <li>Longueur de clef personnalisée (merci à Greg Witczak)</li>
<li>correction de la fonctionnalité partagée avec d'autres applis</li> <li>Correctif - fonctionnalités partagées d'autres applis</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>corrige le déchiffrement des messages/fichiers pgp symétriques</li> <li>Correctif - déchiffrement de messages/fichiers pgp symétriques</li>
<li>écran réusiné de modification des clefs (merci à Ash Hughes)</li> <li>Nouvel mouture de l'écran de modification des clefs (merci à Ash Hughes)</li>
<li>nouveau style moderne des écrans de chiffrement/déchiffrement</li> <li>Nouvelle conception moderne pour les écrans de chiffrement/déchiffrement</li>
<li>API OpenPGP version 3 (comptes multiples d'api, correctifs internes, recherche de clefs)</li> <li>API OpenPGP version 3 (comptes multiples d'api, correctifs internes, recherche de clefs)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -34,44 +48,44 @@
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>Nouvelle liste de clefs unifiée</li> <li>Nouvelle liste de clefs unifiée</li>
<li>empreinte de clef colorée</li> <li>Empreintes de clefs colorées</li>
<li>prise en charge des ports du serveur de clefs</li> <li>Prise en charge des ports des serveurs de clefs</li>
<li>désactiver la possibilité de générer des clefs faibles</li> <li>Désactiver la possibilité de générer des clefs faibles</li>
<li>bien plus de travail interne sur l'API</li> <li>Encore plus de travail interne dans l'API</li>
<li>certifier les ID d'utilisateurs</li> <li>Certifier les ID d'utilisateurs</li>
<li>requête du serveur de clef basée sur une sortie lisible par la machine</li> <li>Requêtes des serveurs de clefs basées sur des sorties assimilables par la machine</li>
<li>verrouiller le tiroir de navigation sur les tablettes</li> <li>Verrouiller les tiroirs de navigation sur les tablettes</li>
<li>suggestions de courriels à la création des clefs</li> <li>Suggestion de courriels à la création de clefs</li>
<li>recherche dans les listes de clefs publiques</li> <li>Rechercher dans les listes de clefs publiques</li>
<li>et bien plus d'améliorations et de correctifs...</li> <li>Et bien plus d'améliorations et de correctifs</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>correctif de plantage lors de la mise à niveau des anciennes versions</li> <li>Correctif d'urgence pour le plantage lors de la mise à niveau à partir d'anciennes versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>supprimer l'exportation non nécessaire des clefs publiques lors de l'exportation d'une clef secrète</li> <li>Suppressions de l'exportation non nécessaire des clefs publiques lors de l'exportation de clefs secrètes (merci à Ash Hughes)</li>
<li>correctif de définition de la date date de péremption des clefs (merci à Ash Hughes)</li> <li>Correctif - définition de la date de péremption des clefs (merci à Ash Hughes)</li>
<li>autres correctifs internes affectant la modifications des clefs (merci à Ash hughes)</li> <li>Plus de correctifs internes affectant la modifications des clefs (merci à Ash hughes)</li>
<li>interrogation des serveurs de clefs directement depuis l'écran d'importation</li> <li>Interrogation des serveurs de clefs directement depuis l'écran d'importation</li>
<li>correctif de mise en page et du style des fenêtres de dialogue sur Android 2.2-3.0</li> <li>Correctif - mise en page et du style des fenêtres de dialogue sur Android 2.2-3.0</li>
<li>corriger un plantage pour les clefs avec des ID d'utilisateurs vides</li> <li>Correctif - plantage pour les clefs avec des ID d'utilisateur vides</li>
<li>corrige un plantage et des listes vides en revenant de l'écran de signature</li> <li>Correctif - plantage et listes vides en revenant de l'écran de signature</li>
<li>Bouncy Castle (bibliothèque cryptographique) mise à jour de 1.47 à 1.50 et compilée depuis la source</li> <li>Bouncy Castle (bibliothèque cryptographique) mise à jour de 1.47 à 1.50 et compilée depuis la source</li>
<li>correction du téléversement d'une clef depuis l'écran de signature</li> <li>Correctif - téléversement d'une clef depuis l'écran de signature</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>nouvelle conception avec tiroir de navigation</li> <li>Nouvelle conception avec tiroir de navigation</li>
<li>nouveau style de liste des clefs publics</li> <li>Nouvelle conception de la liste des clefs publics</li>
<li>nouvel affichage des clefs publics</li> <li>Nouvelle vue des clefs publics</li>
<li>correctif de bogues d'importation de clefs</li> <li>Correctif de bogues d'importation de clefs</li>
<li>certification croisée des clefs (merci à Ash Hughes)</li> <li>Certification croisée des clefs (merci à Ash Hughes)</li>
<li>bonne gestion des mots de passe UTF-8 (merci à Ash Hughes)</li> <li>Bonne gestion des mots de passe UTF-8 (merci à Ash Hughes)</li>
<li>première version avec de nouvelles langues (merci aux contributeurs sur Transifex)</li> <li>Première version avec de nouvelles langues (merci aux contributeurs sur Transifex)</li>
<li>correctif et amélioration du partage des clefs par codes QR</li> <li>Correctif et amélioration du partage de clefs par codes QR</li>
<li>vérification de la signature des paquets pour l'API</li> <li>Vérification de la signature des paquets pour l'API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>beaucoup de bogues corrigés</li> <li>Beaucoup de bogues corrigés</li>
<li>nouvelle API pour les développeurs</li> <li>Nouvelle API pour les développeurs</li>
<li>Correctif du blogue PRNG par Google</li> <li>Correctif du blogue PRNG par Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>conception complètement repensée</li> <li>Conception complètement repensée</li>
<li>partage de clefs publiques par codes QR, faisceau NFC</li> <li>Partage de clefs publiques par codes QR, faisceau NFC</li>
<li>signer les clefs</li> <li>Signer les clefs</li>
<li>téléverser les clefs vers le serveur</li> <li>Téléverser les clefs vers le serveur</li>
<li>corrige les problèmes d'importation</li> <li>Corrige des problèmes d'importation</li>
<li>nouvelle API AIDL</li> <li>Nouvelle API AIDL</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>prise en charge de base du serveur de clef</li> <li>Prise en charge de base du serveur de clefs</li>
<li>app2sd</li> <li>App2sd</li>
<li>plus de choix pour le cache de phrase de passe : 1, 2, 4, 8 heures</li> <li>Plus de choix pour le cache des phrases de passe : 1, 2, 4, 8 heures</li>
<li>traductions : norvégien (merci Sander Danielsen), chinois (merci Zhang Fredrick)</li> <li>Traductions : norvégien (merci Sander Danielsen), chinois (merci Zhang Fredrick)</li>
<li>correctifs de bogues</li> <li>Correctifs de bogues</li>
<li>optimisations</li> <li>Optimisations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>problème corrigé avec la vérification de la signature des textes se terminant par un retour à la ligne</li> <li>Problème corrigé avec la vérification de la signature des textes se terminant par un retour à la ligne</li>
<li>plus de choix pour la durée de vie de la phrase de passe : (20, 40, 60 min)</li> <li>Plus de choix pour la durée de vie de la phrase de passe : (20, 40, 60 min)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>correction de l'ajout de compte sur Froyo</li> <li>Correctif - plantage lors de l'ajout de compte sur Froyo</li>
<li>suppression sécurisée de fichiers</li> <li>Suppression sécurisée de fichiers</li>
<li>option de suppression du fichier de clef après l'importation</li> <li>Option de suppression du fichier de clef après l'importation</li>
<li>chiffrement/déchiffrement de flux (galerie, etc.)</li> <li>Chiffrement/déchiffrement de flux (galerie, etc.)</li>
<li>nouvelles options (langue, forcer les signatures v3)</li> <li>Nouvelles options (langue, forcer les signatures v3)</li>
<li>changements dans l'interface</li> <li>Changements dans l'interface</li>
<li>correctifs de bogues</li> <li>Correctifs de bogues</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>Traduction allemande et italienne</li> <li>Traduction allemande et italienne</li>
<li>paquet beaucoup plus petit grâce à des sources BC réduites</li> <li>Paquet beaucoup plus petit grâce à des sources BC réduites</li>
<li>nouvelle interface utilisateur pour les paramètres</li> <li>Nouvelle IUG pour les préférences</li>
<li>ajustement de la mise en page pour les localisations</li> <li>Ajustement de la mise en page pour les localisations</li>
<li>correctif d'un bogue de signature</li> <li>Correctif de bogue de signature</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>correction d'un autre plantage causé par quelque bogue SDK avec le constructeur de requêtes</li> <li>Correction d'un autre plantage causé par quelque bogue SDK avec le constructeur de requêtes</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>corrections de plantages durant le chiffrement/la signature et aussi peut-être l'exportation de clef</li> <li>Corrections de plantages durant le chiffrement/la signature et possiblement l'exportation de clefs</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>listes de clefs filtrables</li> <li>Listes de clefs filtrables</li>
<li>présélection plus intelligente des clefs de chiffrement</li> <li>Présélection plus intelligente des clefs de chiffrement</li>
<li>nouvelle gestion des intentions pour VIEW et SEND, permet le chiffrement/déchiffrement des fichiers depuis les gestionnaires de fichiers</li> <li>Nouvelle gestion des intentions pour VIEW et SEND, permet le chiffrement/déchiffrement des fichiers depuis les gestionnaires de fichiers</li>
<li>correctifs et fonctions additionnelles (présélection des clefs) pour K-9-Mail, nouvelle version bêta disponible.</li> <li>Correctifs et fonctions additionnelles (présélection des clefs) pour K-9-Mail, nouvelle version bêta disponible</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>Intégration à K-9 Mail, APG prenant en charge la version bêta de K-9 Mail</li> <li>Intégration à K-9 Mail, APG prenant en charge la version bêta de K-9 Mail</li>
<li>prise en charge de plus de gestionnaires de fichiers (incluant ASTRO)</li> <li>Prise en charge de plus de gestionnaires de fichiers (incluant ASTRO)</li>
<li>Traduction slovène</li> <li>Traduction slovène</li>
<li>nouvelle base de données, bien plus rapide, utilisation de la mémoire moindre</li> <li>Nouvelle base de données, bien plus rapide, utilisation de la mémoire moindre</li>
<li>intentions définies et fournisseur de contenu pour d'autres applis</li> <li>Intentions définies et fournisseur de contenu pour d'autres applis</li>
<li>correctifs de bogues</li> <li>Correctifs de bogues</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> un implementazione OpenPGP per Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> un implementazione OpenPGP per Android.</p>
<p>Licenza: GPLv3+</p> <p>Licenza: GPLv3+</p>
<h2>Sviluppatori OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Capo Sviluppatore)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (Patch crittografia)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (Interfaccia Utente)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Sviluppatori APG 1.x</h2>
<ul>
<li>Thialfihar (Capo Sviluppatore)</li>
<li>'Senecaso' (QRCode, firma chiavi, caricamento chiavi)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Librerie</h2> <h2>Librerie</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Licenza Apache v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Licenza Apache v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licenza Apache v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (Licenza MIT)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licenza Apache v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Licenza Apache v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Licenza Apache v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licenza MIT X11)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licenza MIT X11)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licenza Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licenza Apache v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Licenza Apache v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Porpora! (Dominik, Vincent)</li> <li>Porpora! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>alcune correzioni per i bug di regressione</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>certificazioni chiave (grazie a Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>supporto per chiavi segrete parziali GnuPG (grazie a Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>nuovo design per la verifica della firma</li> <li>New design for signature verification</li>
<li>lunghezza chiave personalizzata (grazie a Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>fix funzionalità di condivisione da altre app</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>Corretta la decodifica di messaggi PGP / file simmetrici</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>Refactoring della schermata di modifica chiave (grazie a Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>nuovo design moderno per le schermate di codifica / decodifica</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API versione 3 (api account multipli, correzioni interne, ricerca chiavi)</li> <li>OpenPGP API versione 3 (api account multipli, correzioni interne, ricerca chiavi)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Oltre a numerose piccole correzioni, un notevole numero di patch sono state fatte dalle seguenti persone (in ordine alfabetico): Oltre a numerose piccole correzioni, un notevole numero di patch sono state fatte dalle seguenti persone (in ordine alfabetico):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paolo Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paolo Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>nuova lista chiave unificata</li> <li>New unified key list</li>
<li>impronta chiave colorata</li> <li>Colorized key fingerprint</li>
<li>supporto per porte</li> <li>Support for keyserver ports</li>
<li>disattiva la possibilità di generare chiavi deboli</li> <li>Deactivate possibility to generate weak keys</li>
<li>molto più lavoro interno sulle API</li> <li>Much more internal work on the API</li>
<li>certificazione ID utente</li> <li>Certify user ids</li>
<li>interrogazione keyserver basate su output leggibile a livello macchina</li> <li>Keyserver query based on machine-readable output</li>
<li>blocco del menu di navigazione sui tablet</li> <li>Lock navigation drawer on tablets</li>
<li>suggerimenti per e-mail sulla creazione di chiavi</li> <li>Suggestions for emails on creation of keys</li>
<li>ricerca nelle liste di chiavi pubbliche</li> <li>Search in public key lists</li>
<li>e molti altri miglioramenti e correzioni ...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>correzione del crash quando si aggiorna da versioni precedenti</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>rimossa esportazione non necessaria delle chiavi pubbliche quando si esportano le chiavi private (grazie a Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>corretto impostazione data di scadenza delle chiavi (grazie a Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>altre correzioni interne quando si modificano le chiavi (grazie a Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>interrogazione server delle chiavi direttamente dalla schermata di importazione</li> <li>Querying keyservers directly from the import screen</li>
<li>corretto layout e dialog style su Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>corretto crash su chiavi con id utente vuoto</li> <li>Fix crash on keys with empty user ids</li>
<li>corretto crash e liste vuote quando si torna dalla schermata di firma</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (libreria crittografica) aggiornata da 1.47 a 1.50 e compilata da sorgente</li> <li>Bouncy Castle (libreria crittografica) aggiornata da 1.47 a 1.50 e compilata da sorgente</li>
<li>corretto upload delle chiavi dalla schermata di firma</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>nuovo design con drawer di navigazione</li> <li>New design with navigation drawer</li>
<li>nuovo design per la lista chiavi pubbliche</li> <li>New public key list design</li>
<li>nuova visuale chiavi pubbliche</li> <li>New public key view</li>
<li>correzione bug per importazione chiavi</li> <li>Bug fixes for importing of keys</li>
<li>Chiave certificazione incrociata (grazie a Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>password UTF-8 gestite correttamente (grazie a Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>Prima versione con nuove lingue (grazie ai contributori su Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>condivisione di chiavi via Codici QR corretta e migliorata</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>Verifica firma pacchetto per API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>molte correzioni di bug</li> <li>Lots of bug fixes</li>
<li>nuove API per sviluppatori</li> <li>New API for developers</li>
<li>PRNG bug fix by Google</li> <li>PRNG bug fix by Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>completo restyle</li> <li>Complete redesign</li>
<li>condivisione chiavi pubbliche via codici qr, nfc beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>firma chiavi</li> <li>Sign keys</li>
<li>Carica chiavi sul server</li> <li>Upload keys to server</li>
<li>corrette caratteristiche di importazione</li> <li>Fixes import issues</li>
<li>nuova AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>supporto base per server delle chiavi</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>Aggiunte opzioni per la cache della frase di accesso: 1, 2, 4, 8 ore</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>Traduzioni: Norvegese (grazie, Sander Danielsen), Cinese (grazie, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>correzione bug</li> <li>Bugfixes</li>
<li>ottimizzazioni</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>corretto problema con la verifica firma di testi con capo finale</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>maggiori opzioni per il tempo di mantenimento della cache della frase di accesso (20, 40, 60 minuti)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>crash della aggiunta degli account risolto su Froyo</li> <li>Account adding crash on Froyo fixed</li>
<li>Cancellazione sicura dei file</li> <li>Secure file deletion</li>
<li>opzione per cancellare file delle chiavi dopo l'importazione</li> <li>Option to delete key file after import</li>
<li>flusso codifica/decodifica (galleria, ecc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>nuove opzioni (lingua, forza firme v3)</li> <li>New options (language, force v3 signatures)</li>
<li>cambiamenti interfaccia</li> <li>Interface changes</li>
<li>correzione bug</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>Traduzione Italiana e Tedesca</li> <li>Traduzione Italiana e Tedesca</li>
<li>dimensioni pacchetto ridotte, a causa della riduzione dei sorgenti BC</li> <li>Much smaller package, due to reduced BC sources</li>
<li>Nuove preferenze GUI</li> <li>New preferences GUI</li>
<li>Regolazione layout per la localizzazione</li> <li>Layout adjustment for localization</li>
<li>correzione bug firma</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>corretto altro crash causato da alcuni bug SDK con query builder</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>corretto crash durante codifica/firma e possibilita' di esportare chiave</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>liste chiavi filtrabili</li> <li>Filterable key lists</li>
<li>preselezione di chiavi di codifica intelligente</li> <li>Smarter pre-selection of encryption keys</li>
<li>nuovo gestore intent per VIEW e SEND, permette la codifica/decodifica file all'infuori di file manager</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>caratteristiche corrette e aggiunte (preselezione chiavi) per K-9 Mail. nuova build beta disponibile</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>integrazione K-9 Mail, APG supporto beta build di K-9 Mail</li> <li>integrazione K-9 Mail, APG supporto beta build di K-9 Mail</li>
<li>supporto per altri file manager (incluso ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>traduzione Slovena</li> <li>traduzione Slovena</li>
<li>Nuovo database, piu' veloce, utilizzo memoria ridotto</li> <li>New database, much faster, less memory usage</li>
<li>Definiti Intent e ContentProvider per le altre app</li> <li>Defined Intents and content provider for other apps</li>
<li>correzione bug</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> は Android における OpenPGP 実装です。</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> は Android における OpenPGP 実装です。</p>
<p>ライセンス: GPLv3以降</p> <p>ライセンス: GPLv3以降</p>
<h2>OpenKeychain開発者</h2> <h2>開発者</h2>
<ul> <ul>
<li>Dominik Schürmann (主任開発者)</li> <li>Dominik Schürmann (メンテナ)</li>
<li>Ash Hughes (暗号関係パッチ提供)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>APG 1.xの開発者達</h2>
<ul>
<li>Thialfihar (主任開発者)</li>
<li>'Senecaso' (QRコード, 鍵署名, 鍵アップロード関係)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>ライブラリ</h2> <h2>ライブラリ</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>そして主要な新しい機能を主眼としたこのリリースでたくさんのバグが修正されました</li>
<li>鍵編集: 新しいすごいデザイン、鍵の破棄</li>
<li>鍵インポート: 新しいすごいデザイン、hkps経由での鍵サーバとの安全な接続、そしてDNS SRVレコードによる鍵サーバの解決</li>
<li>新しい初回表示</li>
<li>新しい鍵生成画面: Androidのあなたの個人アカウントをベースとした名前とメールの自動補完</li>
<li>ファイル暗号化: 新しいすごいデザイン、複数ファイルの暗号化をサポートする</li>
<li>鍵のステータス表示の新しいアイコン(Brennan Novak提供)</li>
<li>重要なバグ修正: 巨大な鍵コレクションをファイルからインポートするのが可能になりました</li>
<li>キャッシュしたパスフレーズの通知表示</li>
</ul>
<p> Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfiharの働きなくしてはこのリリースはありませんでした</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -15,16 +29,16 @@
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>鍵証明 (thanks to Vincent Breitmoser)</li> <li>鍵証明 (ありがとうVincent Breitmoser)</li>
<li>GnuPGの部分秘密鍵のサポート (thanks to Vincent Breitmoser)</li> <li>GnuPGの部分秘密鍵のサポート (ありがとうVincent Breitmoser)</li>
<li>新しいデザインでの署名の検証</li> <li>新しいデザインでの署名の検証</li>
<li>カスタムの鍵長 (thanks to Greg Witczak)</li> <li>カスタムの鍵長 (ありがとうGreg Witczak)</li>
<li>他のアプリからの共有ファンクションの修正</li> <li>他のアプリからの共有ファンクションの修正</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>対称暗号化PGPメッセージ/ファイルの復号化を修正</li> <li>対称暗号化PGPメッセージ/ファイルの復号化を修正</li>
<li>鍵編集画面のリファクタ (thanks to Ash Hughes)</li> <li>鍵編集画面のリファクタ (ありがとうAsh Hughes)</li>
<li>暗号化/復号化画面を新しいモダンなデザインに</li> <li>暗号化/復号化画面を新しいモダンなデザインに</li>
<li>OpenPGP API バージョン 3 (複数APIアカウント, 内部修正,鍵検索)</li> <li>OpenPGP API バージョン 3 (複数APIアカウント, 内部修正,鍵検索)</li>
</ul> </ul>
@ -33,15 +47,15 @@
また、以下の人達(アルファベット順)の作ってくれたいくつもののさなパッチや相当数のパッチにも: また、以下の人達(アルファベット順)の作ってくれたいくつもののさなパッチや相当数のパッチにも:
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>新しい統合リスト</li> <li>新しい統合キーリスト</li>
<li>鍵指紋のカラー化</li> <li>鍵指紋のカラー化</li>
<li>鍵サーバのポート設定のサポート</li> <li>鍵サーバのポート設定のサポート</li>
<li>弱い鍵の生成が可能だったのを無効化</li> <li>弱い鍵の生成をしてしまうのを無効化</li>
<li>さらなるAPIでの内部動作</li> <li>さらなるAPIでの内部動作</li>
<li>ユーザIDの証明</li> <li>ユーザIDの証明</li>
<li>鍵サーバへの要求をマシンリーダブル出力を基盤にした</li> <li>鍵サーバへの要求をマシンリーダブル出力を基盤にした</li>
<li>タブレットでのナビゲーションドロワーのロック</li> <li>タブレットでのナビゲーションドロワーのロック</li>
<li>鍵の生成についてメールでのサジェスト</li> <li>鍵の生成でのメールについての提案</li>
<li>公開鍵リスト内での検索</li> <li>公開鍵リスト内での検索</li>
<li>そしてさらなる改善と修正...</li> <li>そしてさらなる改善と修正...</li>
</ul> </ul>
@ -51,9 +65,9 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>秘密鍵のエクスポート時における必要でない公開鍵のエクスポートの削除 (thanks to Ash Hughes)</li> <li>秘密鍵のエクスポート時における必要でない公開鍵のエクスポートの削除 (ありがとうAsh Hughes)</li>
<li>鍵の期限日時設定の修正 (thanks to Ash Hughes)</li> <li>鍵の期限日時設定の修正 (ありがとうAsh Hughes)</li>
<li>鍵編集時のさらなる内部修正 (thanks to Ash Hughes)</li> <li>鍵編集時のさらなる内部修正 (ありがとうAsh Hughes)</li>
<li>インポート画面から直接鍵サーバへ要求するようにした</li> <li>インポート画面から直接鍵サーバへ要求するようにした</li>
<li>Android 2.2から3.0でのレイアウトとダイアログスタイルの修正</li> <li>Android 2.2から3.0でのレイアウトとダイアログスタイルの修正</li>
<li>空ユーザIDの鍵でのクラッシュ修正</li> <li>空ユーザIDの鍵でのクラッシュ修正</li>
@ -63,13 +77,13 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>ナビゲーションドロワーの新しいデザイン</li> <li>ナビゲーションドロワー付きの新しいデザイン</li>
<li>新しい公開鍵リストデザイン</li> <li>新しい公開鍵リストデザイン</li>
<li>新しい公開鍵ビュー</li> <li>新しい公開鍵ビュー</li>
<li>鍵のインポート時のバグ修正</li> <li>鍵のインポート時のバグ修正</li>
<li>鍵のクロス証明 (thanks to Ash Hughes)</li> <li>鍵のクロス証明 (ありがとうAsh Hughes)</li>
<li>適切な UTF-8 パスワード処理 (thanks to Ash Hughes)</li> <li>適切な UTF-8 パスワード処理 (ありがとうAsh Hughes)</li>
<li>新しい言語での最初のバージョン (thanks to the contributors on Transifex)</li> <li>新しい言語での最初のバージョン (ありがとうTransifexの貢献者達)</li>
<li>QRコードによる鍵共有の修正と改善</li> <li>QRコードによる鍵共有の修正と改善</li>
<li>APIでのパッケージ署名検証</li> <li>APIでのパッケージ署名検証</li>
</ul> </ul>
@ -97,7 +111,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<li>鍵サーバの基本サポート</li> <li>鍵サーバの基本サポート</li>
<li>App2SD</li> <li>App2SD</li>
<li>パスフレーズのキャッシュ時間について1,2,4,8時間の選択肢追加</li> <li>パスフレーズのキャッシュ時間について1,2,4,8時間の選択肢追加</li>
<li>翻訳: ノルウェー語 (thanks, Sander Danielsen), 中国語 (thanks, Zhang Fredrick) 追加</li> <li>翻訳: ノルウェー語 (ありがとう、Sander Danielsen)、中国語 (ありがとう、Zhang Fredrick) 追加</li>
<li>バグ修正</li> <li>バグ修正</li>
<li>最適化</li> <li>最適化</li>
</ul> </ul>

View File

@ -1,50 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li>
<li>Tim Bray</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -1,156 +0,0 @@
<html>
<head></head>
<body>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>new unified key list</li>
<li>colorized key fingerprint</li>
<li>support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li>
<li>certify user ids</li>
<li>keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li>
<li>search in public key lists</li>
<li>and much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -1,12 +0,0 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Getting started</h2>
<p>First you need a personal secret key. Create one via the option menus in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>Applications</h2>
<p>Several applications support OpenKeychain to encrypt/sign your private communication:<br><img src="apps_k9"><br>K-9 Mail: OpenKeychain support available in current <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: App to send a PGP-signed request to a server to open or close something, e.g. a door</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head></head>
<body>
<h2>Web of Trust</h2>
<p>The Web of Trust describes the part of PGP which deals with creation and bookkeeping of certifications. It provides mechanisms to help the user keep track of who a public key belongs to, and share this information with others; To ensure the privacy of encrypted communication, it is essential to know that the public key you encrypt to belongs to the person you think it does.</p>
<h2>Support in OpenKeychain</h2>
<p>There is only basic support for Web of Trust in OpenKeychain. This is a heavy work in progress and subject to changes in upcoming releases.</p>
<h2>Trust Model</h2>
<p>Trust evaluation is based on the simple assumption that all keys which have secret keys available are trusted. Public keys which contain at least one user id certified by a trusted key will be marked with a green dot in the key listings. It is not (yet) possible to specify trust levels for certificates of other known public keys.</p>
<h2>Certifying keys</h2>
<p>Support for key certification is available, and user ids can be certified individually. It is not yet possible to specify the level of trust or create local and other special types of certificates.</p>
</body>
</html>

View File

@ -1,11 +0,0 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is een OpenPGP implementatie voor Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> is een OpenPGP implementatie voor Android.</p>
<p>Licentie: GPLv3+</p> <p>Licentie: GPLv3+</p>
<h2>Ontwikkelaars OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (hoofdontwikkelaar)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (crypto patches)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Ontwikkelaars APG 1.x</h2>
<ul>
<li>Thialfihar (Hoofdontwikkelaar)</li>
<li>'Senecaso' (QRCode, signeersleutel, uploadsleutel)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Bibliotheken</h2> <h2>Bibliotheken</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Bibliotheek v7 'appcompat'</a> (Apache Licentie v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Bibliotheek v7 'appcompat'</a> (Apache Licentie v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache Licentie v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT Licentie)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache Licentie v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache Licentie v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache Licentie v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 Licentie)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 Licentie)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Licentie v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Licentie v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache Licentie v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Paars! (Dominik, Vincent)</li> <li>Paars! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>enige fixes voor regressie bugs</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>sleutel certificaties (dank aan Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>support voor GnuPG deel geheime sleutels (dank aan Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>nieuw design voor handtekeningsverificatie</li> <li>New design for signature verification</li>
<li>aangepaste sleutellengte (dank aan Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>fix deel-functionaliteit van andere apps</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>fix decodering van symmetrische pgp berichten/bestanden</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>bewerk sleutel scherm opnieuw gedaan (dank aan Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>nieuw modern design voor codeer/decodeer schermen</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API versie 3 (meerdere api accounts, interne fixes, sleutel lookup)</li> <li>OpenPGP API versie 3 (meerdere api accounts, interne fixes, sleutel lookup)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Naast meerdere kleine patches zijn een redelijk aantal patches gemaakt door de volgende mensen (in alfabetische volgorde): Naast meerdere kleine patches zijn een redelijk aantal patches gemaakt door de volgende mensen (in alfabetische volgorde):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>nieuwe verenigde sleutellijst</li> <li>New unified key list</li>
<li>gekleurde sleutel vingerafdruk</li> <li>Colorized key fingerprint</li>
<li>support voor sleutelserver ports</li> <li>Support for keyserver ports</li>
<li>deactiveer mogelijkheid om zwakke sleutels te genereren</li> <li>Deactivate possibility to generate weak keys</li>
<li>veel meer intern werk aan het API</li> <li>Much more internal work on the API</li>
<li>certificeer gebruiker ids</li> <li>Certify user ids</li>
<li>sleutelserver opdracht gebaseerd op machine-leesbare output</li> <li>Keyserver query based on machine-readable output</li>
<li>Versleutel navigatiemenu op tablets</li> <li>Lock navigation drawer on tablets</li>
<li>suggesties voor e-mails bij aanmaken van sleutels</li> <li>Suggestions for emails on creation of keys</li>
<li>zoek in publieke sleutel lijsten</li> <li>Search in public key lists</li>
<li>en veel meer verbeteringen en fixes...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>hotfix voor crash bij het upgraden van oude versies</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>verwijder onnodige export van publieke sleutels bij het exporteren van de geheime sleutel (dank aan Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix instellingen verloopdata op sleutels (dank aan Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>meer interne fixes tijdens het bewerken van sleutels (dank aan Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>sleutelservers direct van het importeerscherm zoeken</li> <li>Querying keyservers directly from the import screen</li>
<li>fix layout en dialoog stijl op Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash op sleutels met lege gebruiker id's</li> <li>Fix crash on keys with empty user ids</li>
<li>fix crash en lege lijsten bij het terugkomen van het ondertekenscherm</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptografie bibliotheek) bijgewerkt van 1.47 naar 1.50 en versie van bron</li> <li>Bouncy Castle (cryptografie bibliotheek) bijgewerkt van 1.47 naar 1.50 en versie van bron</li>
<li>fix uploaden van sleutel van ondertekenscherm</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>nieuw design met navigatiemenu</li> <li>New design with navigation drawer</li>
<li>nieuw publieke sleutel lijst design</li> <li>New public key list design</li>
<li>nieuw publieke sleutel uiterlijk</li> <li>New public key view</li>
<li>bug fixes voor importeren van sleutels</li> <li>Bug fixes for importing of keys</li>
<li>sleutel kruis-certificatie (dank aan Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>behandelt UTF-8 wachtwoorden goed (dank aan Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>eerste versie met nieuwe talen (dank aan de medewerkers bij Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>delen van sleutels via QR Codes gefixt en verbeterd</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>pakket handtekening verificatie voor API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>veel bugfixes</li> <li>Lots of bug fixes</li>
<li>nieuwe API voor ontwikkelaars</li> <li>New API for developers</li>
<li>PRNG bug fix door Google</li> <li>PRNG bug fix door Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>complete herdesign</li> <li>Complete redesign</li>
<li>deel publieke sleutels via qr codes, nfc beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>sleutels ondertekenen</li> <li>Sign keys</li>
<li>upload sleutels naar server</li> <li>Upload keys to server</li>
<li>fixt importeerfouten</li> <li>Fixes import issues</li>
<li>nieuwe AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>basis sleutelserver support</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>meer keuzes voor wachtwoord cache: 1, 2, 4, 8, uren</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>vertalingen: Noors (bedankt, Sander Danielsen), Chinees (bedankt, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li> <li>Bugfixes</li>
<li>optimalisaties</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>probleem met handtekeningverificatie van teksten met nieuwe trailing newline gefixt</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>meer opties voor wachtwoord cache tijd te leven (20, 40, 60 minuten)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>account toevoegen crash op Froyo gefixt</li> <li>Account adding crash on Froyo fixed</li>
<li>veilige bestandsverwijdering</li> <li>Secure file deletion</li>
<li>optie om sleutel te verwijderen na importeren</li> <li>Option to delete key file after import</li>
<li>stream codering/decodering (gallery, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>nieuwe opties (taal, force v3 handtekeningen)</li> <li>New options (language, force v3 signatures)</li>
<li>interface veranderingen</li> <li>Interface changes</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>Duitse en Italiaanse vertaling</li> <li>Duitse en Italiaanse vertaling</li>
<li>veel kleiner pakket, door verminderde BC bronnen</li> <li>Much smaller package, due to reduced BC sources</li>
<li>nieuwe voorkeuren GUI</li> <li>New preferences GUI</li>
<li>layout aanpassing voor plaatsbepaling</li> <li>Layout adjustment for localization</li>
<li>handtekening bugfix</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>nog een crash gefixt veroorzaakt door een SDK bug met query builder</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>crashes tijdens codering/signering en mogelijk sleutel importeren gefixt</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>filterbare sleutellijsten</li> <li>Filterable key lists</li>
<li>slimmere voor-selectie van codeersleutels</li> <li>Smarter pre-selection of encryption keys</li>
<li>nieuwe Intent behandeling voor VIEW en SEND, maakt het mogelijk om bestanden te coderen/decoderen uit bestandsmanagers</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes en meer functies (sleutel voorselectie) voor K-9 Mail, nieuwe beta versie beschikbaar</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>K-9 Mail integratie, APG ondersteunende beta versie van K-9 Mail</li> <li>K-9 Mail integratie, APG ondersteunende beta versie van K-9 Mail</li>
<li>support voor meer bestandsmanagers (inclusief ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slovenische vertaling</li> <li>Slovenische vertaling</li>
<li>nieuwe database, veel sneller, minder geheugenverbruik</li> <li>New database, much faster, less memory usage</li>
<li>gedefinieerde Intents en inhoudsprovider voor andere apps</li> <li>Defined Intents and content provider for other apps</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> to implementacja OpenPGP na platformę Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> to implementacja OpenPGP na platformę Android.</p>
<p>Licencja: GPLv3+</p> <p>Licencja: GPLv3+</p>
<h2>Deweloperzy OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Wiodący developer)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (łatki crypto)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (Interfejs Użytkownika)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Deweloperzy APG 1.x</h2>
<ul>
<li>Thialfihar (Wiodący deweloper)</li>
<li>'Senecaso' (kody QR, podpisy kluczy, wysyłanie kluczy)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Biblioteki</h2> <h2>Biblioteki</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Licencja Apache v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Licencja Apache v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licencja Apache v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (Licencja MIT)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Licencja Apache v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Licencja Apache v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Licencja Apache v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licencja MIT X11)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (Licencja MIT X11)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencja Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencja Apache v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Licencja Apache v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>kilka poprawionych błędów regresji</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>certyfikacja kluczy (podziękowania dla Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>dodano wsparcie dla dzielonych kluczy prywatnych GnuPG (podziękowania dla Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>nowy wygląd dla weryfikacji podpisu</li> <li>New design for signature verification</li>
<li>niestandardowa długość klucza (podziękowania dla Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>naprawiono funkcję udostępniania przez inne aplikacje</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>naprawiono deszyfrowanie symetrycznych wiadomości/plików PGP</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>przerobiono ekran edytowania klucza (podziękowania dla Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>nowy nowoczesny design dla ekranów szyfrowania/deszyfrowania</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API wersja 3 (wiele kont API, wewnętrzne poprawki, wyszukiwanie kluczy)</li> <li>OpenPGP API wersja 3 (wiele kont API, wewnętrzne poprawki, wyszukiwanie kluczy)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Poza kilkoma małymi poprawkami, znaczna ilość aktualizacji została wykonana przez poniższe osoby (w kolejności alfabetycznej): Poza kilkoma małymi poprawkami, znaczna ilość aktualizacji została wykonana przez poniższe osoby (w kolejności alfabetycznej):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>nowa ujednolicona lista kluczy</li> <li>New unified key list</li>
<li>pokolowane odciski klucza</li> <li>Colorized key fingerprint</li>
<li>obsługa portów w serwerach kluczy</li> <li>Support for keyserver ports</li>
<li>zablokowana możliwość generowania słabych kluczy</li> <li>Deactivate possibility to generate weak keys</li>
<li>wiele wewnętrznych prac nad API</li> <li>Much more internal work on the API</li>
<li>podpisywanie identyfikatorów użytkowników</li> <li>Certify user ids</li>
<li>zapytania do serwera kluczy wykorzystują wydajniejszą komunikację maszynową</li> <li>Keyserver query based on machine-readable output</li>
<li>zablokowany panel nawigacyjny na tabletach</li> <li>Lock navigation drawer on tablets</li>
<li>podpowiedzi do adresu email przy tworzeniu kluczy</li> <li>Suggestions for emails on creation of keys</li>
<li>wyszukiwanie w liście publicznych kluczy</li> <li>Search in public key lists</li>
<li>i wiele innych usprawnień i poprawek...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>szybka poprawka awarii aplikacji przy aktualizacji ze starszej wersji</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>usunięto zbędne eksportowanie kluczy publicznych przy eksportowaniu kluczy prywatnych (podziękowania dla Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>naprawiono błąd z ustawianiem daty wygaśnięcia kluczy (podziękowania dla Ash Hugens)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>więcej wewnętrznych poprawek przy edytowaniu kluczy (podziękowania dla Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>wysyłanie zapytań do serwera kluczy bezpośrednio z ekranu importu</li> <li>Querying keyservers directly from the import screen</li>
<li>poprawiony wygląd interfejsu i okienek na Androidzie 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>naprawiono awarię programu dla kluczy z pustym identyfikatorem użytkownika</li> <li>Fix crash on keys with empty user ids</li>
<li>naprawiono awarię aplikacji przy powrocie z ekranu podpisywania</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (biblioteka kryptograficzna) zaktualizowana z wersji 1.47 do 1.50 i kompilowana ze źródeł</li> <li>Bouncy Castle (biblioteka kryptograficzna) zaktualizowana z wersji 1.47 do 1.50 i kompilowana ze źródeł</li>
<li>naprawiony błąd przy wysyłaniu klucza z ekranu podpisywania</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>nowy wygląd z panelem nawigacji</li> <li>New design with navigation drawer</li>
<li>nowy wygląd listy kluczy publicznych</li> <li>New public key list design</li>
<li>nowy widok klucza publicznego</li> <li>New public key view</li>
<li>naprawiono błędy związane z importowaniem kluczy</li> <li>Bug fixes for importing of keys</li>
<li>krzyżowa certyfikacja kluczy (podziękowania dla Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>hasła zapisane w UTF-8 są teraz prawidłowo obsługiwane (podziękowania dla Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>pierwsza wersja z nowymi językami (podziękowania dla tłumaczy-wolontariuszy z Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>udostępnianie kluczy przez kody QR zostało poprawione i ulepszone</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>weryfikacja podpisu paczki dla API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>wiele poprawek błędów</li> <li>Lots of bug fixes</li>
<li>nowe API dla programistów</li> <li>New API for developers</li>
<li>Naprawiono błąd generatora liczb losowych (PRNG), Google.</li> <li>Naprawiono błąd generatora liczb losowych (PRNG), Google.</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>kompletna przebudowa</li> <li>Complete redesign</li>
<li>udostępnianie kluczy publicznych przez kody QR oraz NFC</li> <li>Share public keys via qr codes, nfc beam</li>
<li>możliwość podpisywania kluczem</li> <li>Sign keys</li>
<li>wysyłanie kluczy na serwer</li> <li>Upload keys to server</li>
<li>naprawiono problemy związane z importowaniem</li> <li>Fixes import issues</li>
<li>nowy AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>podstawowa obsługa serwerów kluczy</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>dodano więcej przedziałów czasowych zapamiętywania hasła: 1, 2, 4, 8 godzin</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>tłumaczenia: norweski (podziękowania dla Sander Danielsen), chiński (podziękowania dla Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>naprawione błędy</li> <li>Bugfixes</li>
<li>usprawnienia</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>naprawiono problem z weryfikowaniem podpisu tekstów kończących się znakiem nowej linii</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>dodano więcej przedziałów czasowych zapamiętywania hasła (20, 40, 60 minut)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>naprawiono błąd powodujący awarię aplikacji przy dodawaniu nowego konta na Androidzie 2.2 Froyo</li> <li>Account adding crash on Froyo fixed</li>
<li>dodano bezpieczne usuwanie plików</li> <li>Secure file deletion</li>
<li>Dodano możliwość usuwania plików kluczy po zaimportowaniu</li> <li>Option to delete key file after import</li>
<li>możliwość strumieniowego szyfrowania/deszyfrowania (galeria i inne)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>nowe opcje (języki, wymuszanie podpisów v3)</li> <li>New options (language, force v3 signatures)</li>
<li>zmiany w interfejsie</li> <li>Interface changes</li>
<li>naprawione błędy</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>tłumaczenie na niemiecki i włoski</li> <li>tłumaczenie na niemiecki i włoski</li>
<li>znaczne zmniejszenie rozmiaru paczki, z powodu zredukowania źródeł BC</li> <li>Much smaller package, due to reduced BC sources</li>
<li>nowy interfejs graficzny Właściwości</li> <li>New preferences GUI</li>
<li>usprawnienia wyglądu dla lokalizacji</li> <li>Layout adjustment for localization</li>
<li>naprawa błędu z podpisami</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>naprawiono kolejny błąd powodujący awarię aplikacji, spowodowany przez jakąś usterkę w SDK przy budowaniu zapytań</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>naprawiono błąd w trakcie szyfrowania/podpisywania i prawdopodobnie eksportowania klucza</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>dodano możliwość filtrowania listy kluczy</li> <li>Filterable key lists</li>
<li>sprytniejsze automatyczne wybieranie kluczy szyfrujących</li> <li>Smarter pre-selection of encryption keys</li>
<li>dodano nowy sposób obsługi intencji "wyświetl" i "wyślij", umożliwia szyfrowanie/deszyfrowanie plików wprost z menadżera plików.</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>poprawki i dodatkowe funkcje (podpowiedź wyboru klucza) dla K-9 Mail, nowe wydanie beta dostępne</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>integracja z K-9 Mail, APG obsługuje wersję beta K-9 Mail</li> <li>integracja z K-9 Mail, APG obsługuje wersję beta K-9 Mail</li>
<li>dodano wsparcie dla większej liczby menadżerów plików (włącznie z ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>tłumaczenie na słoweński</li> <li>tłumaczenie na słoweński</li>
<li>Wykorzystanie nowej bazy danych, która jest znacznie szybsza i mniej pamięciożerna</li> <li>New database, much faster, less memory usage</li>
<li>zdefiniowano intecję i dostawców treści dla pozostałych aplikacji</li> <li>Defined Intents and content provider for other apps</li>
<li>naprawione błędy</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,50 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li>
<li>Tim Bray</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -1,156 +0,0 @@
<html>
<head></head>
<body>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>new unified key list</li>
<li>colorized key fingerprint</li>
<li>support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li>
<li>certify user ids</li>
<li>keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li>
<li>search in public key lists</li>
<li>and much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -1,12 +0,0 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Getting started</h2>
<p>First you need a personal secret key. Create one via the option menus in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>Applications</h2>
<p>Several applications support OpenKeychain to encrypt/sign your private communication:<br><img src="apps_k9"><br>K-9 Mail: OpenKeychain support available in current <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: App to send a PGP-signed request to a server to open or close something, e.g. a door</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head></head>
<body>
<h2>Web of Trust</h2>
<p>The Web of Trust describes the part of PGP which deals with creation and bookkeeping of certifications. It provides mechanisms to help the user keep track of who a public key belongs to, and share this information with others; To ensure the privacy of encrypted communication, it is essential to know that the public key you encrypt to belongs to the person you think it does.</p>
<h2>Support in OpenKeychain</h2>
<p>There is only basic support for Web of Trust in OpenKeychain. This is a heavy work in progress and subject to changes in upcoming releases.</p>
<h2>Trust Model</h2>
<p>Trust evaluation is based on the simple assumption that all keys which have secret keys available are trusted. Public keys which contain at least one user id certified by a trusted key will be marked with a green dot in the key listings. It is not (yet) possible to specify trust levels for certificates of other known public keys.</p>
<h2>Certifying keys</h2>
<p>Support for key certification is available, and user ids can be certified individually. It is not yet possible to specify the level of trust or create local and other special types of certificates.</p>
</body>
</html>

View File

@ -1,11 +0,0 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> - реализация OpenPGP для Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> - реализация OpenPGP для Android.</p>
<p>Лицензия: GPLv3+</p> <p>Лицензия: GPLv3+</p>
<h2>Разработчики OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (главный разработчик)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (патчи криптографии)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Разработчики APG 1.x</h2>
<ul>
<li>Thialfihar (главный разработчик)</li>
<li>'Senecaso' (QR коды, подписание и загрузка ключей)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Компоненты</h2> <h2>Компоненты</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Библиотека Android AppMsg</a> (Apache License v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Пурпурный! (Dominik, Vincent)</li> <li>Пурпурный! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>исправления найденных ошибок</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>сертификация ключей (благодаря Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>поддержка частично-секретных ключей GnuPG (благодаря Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>новый дизайн проверки подписи</li> <li>New design for signature verification</li>
<li>произв. длина ключей (благодаря Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>исправление ошибки получения данных от других приложений</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>исправлено симметричное шифрование сообщений/файлов</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>переработано окно изменения ключа (благодаря Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>новый дизайн для окон шифрования/расшифровки</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API версии 3 (множественные аккаунты, внутренние исправления, поиск ключей)</li> <li>OpenPGP API версии 3 (множественные аккаунты, внутренние исправления, поиск ключей)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Из общего числа патчей, особенный вклад внесли следующие люди (в алфавитном порядке): Из общего числа патчей, особенный вклад внесли следующие люди (в алфавитном порядке):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>новый объединенный список ключей</li> <li>New unified key list</li>
<li>цветовая индикация отпечатков ключей</li> <li>Colorized key fingerprint</li>
<li>поддержка портов серверов ключей</li> <li>Support for keyserver ports</li>
<li>отключена возможность создавать слабые ключи</li> <li>Deactivate possibility to generate weak keys</li>
<li>ещё больше улучшений работы API</li> <li>Much more internal work on the API</li>
<li>сертификация пользовательских данных</li> <li>Certify user ids</li>
<li>запрос к серверу ключей основывается на машинном формате вывода</li> <li>Keyserver query based on machine-readable output</li>
<li>фиксация панели на планшетах</li> <li>Lock navigation drawer on tablets</li>
<li>подсказки email при создании ключей</li> <li>Suggestions for emails on creation of keys</li>
<li>поиск в списках публичных ключей</li> <li>Search in public key lists</li>
<li>и множество других исправлений и улучшений...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>исправление ошибки при обновлении со старых версий</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>удален не требующийся экспорт публичного ключа при экспорте секретного ключа (спасибо, Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>исправлена ошибка срока годности ключей (спасибо, Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>исправления ошибок при изменении ключей (спасибо, Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>запрос ключа с сервера прямо из окна импорта ключей</li> <li>Querying keyservers directly from the import screen</li>
<li>исправление внешнего вида для Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>исправлено падение когда ключ не содержал имя пользователя</li> <li>Fix crash on keys with empty user ids</li>
<li>исправлено падение и пустой список при возвращении из окна подписания</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>криптографическая библиотека Bouncy Castle обновлена до версии 1.50</li> <li>криптографическая библиотека Bouncy Castle обновлена до версии 1.50</li>
<li>исправлена загрузка ключа из окна подписания</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>новый дизайн с боковой панелью</li> <li>New design with navigation drawer</li>
<li>новый дизайн списка ключей</li> <li>New public key list design</li>
<li>новый вид просмотра ключа</li> <li>New public key view</li>
<li>исправление ошибок импорта ключей</li> <li>Bug fixes for importing of keys</li>
<li>кросс-сертификация ключей (спасибо, Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>правильная обработка паролей в UTF-8 (спасибо, Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>первая версия с новыми языками (спасибо переводчикам с Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>исправление и улучшение передачи ключей через QR коды</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>проверка подписей пакетов для API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>множество исправлений ошибок</li> <li>Lots of bug fixes</li>
<li>новый API для разработчиков</li> <li>New API for developers</li>
<li>исправление ошибки генератора случайных чисел</li> <li>исправление ошибки генератора случайных чисел</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>переработка дизайна</li> <li>Complete redesign</li>
<li>передача ключей через QR коды и NFC</li> <li>Share public keys via qr codes, nfc beam</li>
<li>подписание ключей</li> <li>Sign keys</li>
<li>загрузка ключей на сервер</li> <li>Upload keys to server</li>
<li>исправление проблем импорта</li> <li>Fixes import issues</li>
<li>новый AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>поддержка серверов ключей</li> <li>Basic keyserver support</li>
<li>App2SD</li> <li>App2sd</li>
<li>больше вариантов сохранения кэша пароля: 1, 2, 4, 8 часов</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>переводы: норвежский (спасибо, Sander Danielsen), китайский (спасибо, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>исправления ошибок</li> <li>Bugfixes</li>
<li>оптимизация</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>исправление ошибки при проверке подписи текста с переводом строки</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>больше вариантов сохранения кэша пароля: 20, 40, 60 минут</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>исправление ошибки создания записи на Froyo</li> <li>Account adding crash on Froyo fixed</li>
<li>безопасное удаление файлов</li> <li>Secure file deletion</li>
<li>удаление файла ключа после импорта</li> <li>Option to delete key file after import</li>
<li>передача шифрования (галерея и т.д.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>новые возможности (язык, v3 подписи)</li> <li>New options (language, force v3 signatures)</li>
<li>изменения интерфейса</li> <li>Interface changes</li>
<li>исправления ошибок</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>новые языки: немецкий, итальянский</li> <li>новые языки: немецкий, итальянский</li>
<li>уменьшение размера программы</li> <li>Much smaller package, due to reduced BC sources</li>
<li>новый интерфейс настроек</li> <li>New preferences GUI</li>
<li>изменение вида для локализации</li> <li>Layout adjustment for localization</li>
<li>исправление ошибки подписи</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>исправление еще одной ошибки, возникающей в SDK</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>исправление ошибок при шифровании/подписании и экспорте ключей</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>фильтр списка ключей</li> <li>Filterable key lists</li>
<li>улучшение выбора ключей шифрования</li> <li>Smarter pre-selection of encryption keys</li>
<li>добавлена возможность шифровать файлы прямо из файлового менеджера</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>исправления ошибок и новые возможности для интеграции с K-9 Mail</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>интеграция с K-9 Mail, APG поддерживает beta-версию K-9 Mail</li> <li>интеграция с K-9 Mail, APG поддерживает beta-версию K-9 Mail</li>
<li>поддержка сторонних файловых менеджеров (в т.ч. ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Словенский перевод</li> <li>Словенский перевод</li>
<li>новая база данных, еще быстрее и компактнее</li> <li>New database, much faster, less memory usage</li>
<li>добавлены обработчики для взаимодействия с другими приложениями</li> <li>Defined Intents and content provider for other apps</li>
<li>исправления ошибок</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,50 +0,0 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
<li>Daniel Hammann</li>
<li>Daniel Haß</li>
<li>Greg Witczak</li>
<li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li>
<li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li>
<li>Tim Bray</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul>
</body>
</html>

View File

@ -1,156 +0,0 @@
<html>
<head></head>
<body>
<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>new unified key list</li>
<li>colorized key fingerprint</li>
<li>support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li>
<li>certify user ids</li>
<li>keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li>
<li>search in public key lists</li>
<li>and much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -1,12 +0,0 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -1,22 +0,0 @@
<html>
<head></head>
<body>
<h2>Getting started</h2>
<p>First you need a personal secret key. Create one via the option menus in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>Applications</h2>
<p>Several applications support OpenKeychain to encrypt/sign your private communication:<br><img src="apps_k9"><br>K-9 Mail: OpenKeychain support available in current <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: App to send a PGP-signed request to a server to open or close something, e.g. a door</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head></head>
<body>
<h2>Web of Trust</h2>
<p>The Web of Trust describes the part of PGP which deals with creation and bookkeeping of certifications. It provides mechanisms to help the user keep track of who a public key belongs to, and share this information with others; To ensure the privacy of encrypted communication, it is essential to know that the public key you encrypt to belongs to the person you think it does.</p>
<h2>Support in OpenKeychain</h2>
<p>There is only basic support for Web of Trust in OpenKeychain. This is a heavy work in progress and subject to changes in upcoming releases.</p>
<h2>Trust Model</h2>
<p>Trust evaluation is based on the simple assumption that all keys which have secret keys available are trusted. Public keys which contain at least one user id certified by a trusted key will be marked with a green dot in the key listings. It is not (yet) possible to specify trust levels for certificates of other known public keys.</p>
<h2>Certifying keys</h2>
<p>Support for key certification is available, and user ids can be certified individually. It is not yet possible to specify the level of trust or create local and other special types of certificates.</p>
</body>
</html>

View File

@ -1,11 +0,0 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> je implementacija OpenPGP za Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> je implementacija OpenPGP za Android.</p>
<p>Licenca: GPLv3+</p> <p>Licenca: GPLv3+</p>
<h2>Razvijalci OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (glavni razvijalec)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (kriptografski popravki)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (grafični vmesnik)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Razvijalci APG 1.x</h2>
<ul>
<li>Thialfihar (glavni razvijalec)</li>
<li>'Senecaso' (kode QR, podpisovanje ključev, nalaganje ključev na strežnik)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Knjižnice</h2> <h2>Knjižnice</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (licenca Apache v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (licenca Apache v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (licenca Apache v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (licenca MIT)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (licenca Apache v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (licenca Apache v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (licenca Apache v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (licenca MIT X11)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (licenca MIT X11)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (licenca Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (licenca Apache v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (licenca Apache v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Vijolična! (Dominik, Vincent)</li> <li>Vijolična! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>popravki hroščev ob posodobitvi iz prejšnjih različic</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>overjanje ključev (hvala, Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>podpora delnim zasebnim ključem GnuPG (hvala, Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>nova podoba za preverjanje podpisov</li> <li>New design for signature verification</li>
<li>izbirna dolžina ključev (hvala, Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>popravek za deljenje iz drugih aplikacij</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>popravek pri dešifriranju simetrično šifriranih sporočil pgp</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>popravki kode za okno 'uredi ključ' (hvala, Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>nova, sodobnejša podoba za okna 'šifriraj/dešifriraj'</li> <li>New modern design for encrypt/decrypt screens</li>
<li>API OpenPGP, verzija 3 (podpora za več API računov, interni popravki, iskanje ključev)</li> <li>API OpenPGP, verzija 3 (podpora za več API računov, interni popravki, iskanje ključev)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Največje število popravkov je bilo s strani naslednjih ljudi (po abecednem vrstnem redu): Največje število popravkov je bilo s strani naslednjih ljudi (po abecednem vrstnem redu):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>nov enoten seznam ključev</li> <li>New unified key list</li>
<li>obarvanje prstnih odtisov ključev</li> <li>Colorized key fingerprint</li>
<li>podpora za vrata strežnikov</li> <li>Support for keyserver ports</li>
<li>odstranitev možnosti generiranja šibkih ključev</li> <li>Deactivate possibility to generate weak keys</li>
<li>veliko internega dela na API-ju</li> <li>Much more internal work on the API</li>
<li>overjanje uporabniških ID-jev</li> <li>Certify user ids</li>
<li>iskanje po strežnikih na osnovi strojno berljivih izpisov</li> <li>Keyserver query based on machine-readable output</li>
<li>zaklep navigacijskega poteznika na tabličnih računalnikih</li> <li>Lock navigation drawer on tablets</li>
<li>namigi za izbiro e-poštnih naslovov pri ustvarjanju ključev</li> <li>Suggestions for emails on creation of keys</li>
<li>iskanje po seznamu javnih ključev</li> <li>Search in public key lists</li>
<li>in še veliko drugih izboljšav in popravkov...</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>sesutje pri nadgraditvi iz starejših različic, hitri popravek</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>odprava nepotrebnega hkratnega izvoza javnih ključev ob izvozu zasebnih (hvala, Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>popravek nastavitev datumov poteka ključev (hvala, Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>več internih popravkov pri urejanju ključev (hvala, Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>iskanje strežnikov naravnost iz uvoznega okna</li> <li>Querying keyservers directly from the import screen</li>
<li>popravki za razporeditev in pogovorna okna na Androidu 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>sesutje pri ključih s praznim uporabniškim ID-jem, popravek</li> <li>Fix crash on keys with empty user ids</li>
<li>sesutje in prazen seznam ob povratku iz podpisovalnega okna, popravek</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (kriptografska knjižnica) nadgrajen iz 1.47 na 1.50 in izgrajen iz izvorne kode</li> <li>Bouncy Castle (kriptografska knjižnica) nadgrajen iz 1.47 na 1.50 in izgrajen iz izvorne kode</li>
<li>nalaganje ključev iz podpisovalnega okna, popravek</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>nova podoba za navigacijski poteznik</li> <li>New design with navigation drawer</li>
<li>nova podoba za seznam javnih ključev</li> <li>New public key list design</li>
<li>nova podoba okna za ogled posameznih javnih ključev</li> <li>New public key view</li>
<li>odprava hroščev pri uvozu ključev</li> <li>Bug fixes for importing of keys</li>
<li>navzkrižno overjanje ključev (hvala, Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>pravilno upravljanje gesel v formatu UTF-8 (hvala, Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>prva različica z novimi jeziki (hvala prevajalcem iz portala Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>izbojšave in popravki za deljenje ključev preko kod QR</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>preverjanje podpisov paketov za API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>veliko število popravkov hroščev</li> <li>Lots of bug fixes</li>
<li>nov API za razvijalce</li> <li>New API for developers</li>
<li>popravek za hrošč PRNG, prispeval Google</li> <li>popravek za hrošč PRNG, prispeval Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>kompletna prenova izgleda</li> <li>Complete redesign</li>
<li>deljenje javnih ključev preko kod QR in 'NFC Beam-a'</li> <li>Share public keys via qr codes, nfc beam</li>
<li>podpisovanje ključev</li> <li>Sign keys</li>
<li>nalaganje ključev na strežnik</li> <li>Upload keys to server</li>
<li>popravki problemov z uvozom</li> <li>Fixes import issues</li>
<li>nov API za AIDL</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>osnovna podpora za strežnike javnih ključev</li> <li>Basic keyserver support</li>
<li>podpora app2sd</li> <li>App2sd</li>
<li>več možnosti pomnjenja gesla: 1, 2, 4, 8 ur</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>prevodi: Norveško (hvala, Sander Danielsen), Kitajsko (hvala, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>popravki hroščev</li> <li>Bugfixes</li>
<li>optimizacije</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>odpravljen problem pri preverjanju podpisov besedil</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>več možnosti za pomnjenje gesla v spominu (20, 40, 60 min) </li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>sesutje ob dodajanju računa na napravah Froyo, popravek</li> <li>Account adding crash on Froyo fixed</li>
<li>varno brisanje datotek</li> <li>Secure file deletion</li>
<li>možnost izbrisa datoteke s ključem po uvozu v aplikacijo</li> <li>Option to delete key file after import</li>
<li>šifriranje/dešifriranje toka (galerija, itd.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>nove opcije (jezik, vsili podpis v3)</li> <li>New options (language, force v3 signatures)</li>
<li>spremembe vmesnika</li> <li>Interface changes</li>
<li>popravki hroščev</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>Nemški in Italijanski prevod</li> <li>Nemški in Italijanski prevod</li>
<li>veliko manjša velikost paketa</li> <li>Much smaller package, due to reduced BC sources</li>
<li>nove nastavitve grafičnega vmesnika</li> <li>New preferences GUI</li>
<li>prilagoditev vmesnika za lokalizacije</li> <li>Layout adjustment for localization</li>
<li>popravki pri podpisovanju</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>sesutje zaradi hrošča v SDK, popravek</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>sesutja ob šifriranju/podpisovanju in verjetno tudi izvozu ključev, popravek</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>filtriranje seznama ključev</li> <li>Filterable key lists</li>
<li>pametnejši predizbor šifrirnih ključev</li> <li>Smarter pre-selection of encryption keys</li>
<li>nov način upravljanja z 'nameni' za 'ODPRI' in 'POŠLJI', omogoča šifriranje/dešifriranje datotek izven upravljalnikov datotek.</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>popravki in dodatne funkcije (predizbira ključev) za aplikacijo 'K-9 Mail', nova beta različica</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>integracija z aplikacijo 'K-9 Mail', APG podpira različico beta te aplikacije</li> <li>integracija z aplikacijo 'K-9 Mail', APG podpira različico beta te aplikacije</li>
<li>podpora za več upravljalnikov datotek (mdr. Astro)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slovenski prevod</li> <li>Slovenski prevod</li>
<li>nova baza podatkov, hitrejše delovanje, manjša raba pomnilnika</li> <li>New database, much faster, less memory usage</li>
<li>definirani 'nameni' in vsebina ponudnikov za druge aplikacije</li> <li>Defined Intents and content provider for other apps</li>
<li>popravki hroščev</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>Lisans: GPLv3+</p> <p>Lisans: GPLv3+</p>
<h2>Developers OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Baş geliştirici)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (kripto yamaları)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (Arayüz)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Geliştiriciler APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QR Kodu, anahtar imzalama, anahtar yükleme)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>Kütüphaneler</h2> <h2>Kütüphaneler</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>some fixes for regression bugs</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>key certifications (thanks to Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li> <li>New design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>fix decryption of symmetric pgp messages/files</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li> <li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order): Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>new unified key list</li> <li>New unified key list</li>
<li>colorized key fingerprint</li> <li>Colorized key fingerprint</li>
<li>support for keyserver ports</li> <li>Support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li> <li>Deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li> <li>Much more internal work on the API</li>
<li>certify user ids</li> <li>Certify user ids</li>
<li>keyserver query based on machine-readable output</li> <li>Keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li> <li>Lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li> <li>Suggestions for emails on creation of keys</li>
<li>search in public key lists</li> <li>Search in public key lists</li>
<li>and much more improvements and fixes…</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>hotfix for crash when upgrading from old versions</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li> <li>Querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li> <li>Fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li> <li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>new design with navigation drawer</li> <li>New design with navigation drawer</li>
<li>new public key list design</li> <li>New public key list design</li>
<li>new public key view</li> <li>New public key view</li>
<li>bug fixes for importing of keys</li> <li>Bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>lots of bug fixes</li> <li>Lots of bug fixes</li>
<li>new API for developers</li> <li>New API for developers</li>
<li>PRNG bug fix by Google</li> <li>PRNG bug fix by Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>complete redesign</li> <li>Complete redesign</li>
<li>share public keys via qr codes, nfc beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>sign keys</li> <li>Sign keys</li>
<li>upload keys to server</li> <li>Upload keys to server</li>
<li>fixes import issues</li> <li>Fixes import issues</li>
<li>new AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>basic keyserver support</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li> <li>Bugfixes</li>
<li>optimizations</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>fixed problem with signature verification of texts with trailing newline</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>account adding crash on Froyo fixed</li> <li>Account adding crash on Froyo fixed</li>
<li>secure file deletion</li> <li>Secure file deletion</li>
<li>option to delete key file after import</li> <li>Option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li> <li>New options (language, force v3 signatures)</li>
<li>interface changes</li> <li>Interface changes</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>German and Italian translation</li> <li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li> <li>Much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li> <li>New preferences GUI</li>
<li>layout adjustment for localization</li> <li>Layout adjustment for localization</li>
<li>signature bugfix</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>fixed another crash caused by some SDK bug with query builder</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>fixed crashes during encryption/signing and possibly key export</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>filterable key lists</li> <li>Filterable key lists</li>
<li>smarter pre-selection of encryption keys</li> <li>Smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li> <li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li> <li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li> <li>New database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li> <li>Defined Intents and content provider for other apps</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> імплементація OpenPGP для Андроїду.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> імплементація OpenPGP для Андроїду.</p>
<p>Ліцензія: GPLv3+</p> <p>Ліцензія: GPLv3+</p>
<h2>Розробники OpenPGP Keychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Домінік Шурман (основний розробник)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Аш Гюдж (латки шифрування)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Браян С. Барнс</li> <li>Браян С. Барнс</li>
<li>Бахтіяр 'kalkin' Ґадімов (інтерфейс)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Даніель Гаман</li> <li>Даніель Гаман</li>
<li>Даніель Габ</li> <li>Даніель Габ</li>
<li>Ґреґ Вітчак</li> <li>Ґреґ Вітчак</li>
<li>'mar-v-in'</li>
<li>Маркус Дойтс</li>
<li>Міроджін Бакші</li> <li>Міроджін Бакші</li>
<li>Ніхіл Петер Радж</li> <li>Ніхіл Петер Радж</li>
<li>Пауль Сарбіновський</li> <li>Пауль Сарбіновський</li>
<li>'Senecaso'</li>
<li>Срірам Вояпаті</li> <li>Срірам Вояпаті</li>
<li>Вінсент Брейтмозер</li> <li>Thialfihar (APG 1.x)</li>
<li>Тім Брей</li> <li>Тім Брей</li>
</ul> <li>Вінсент Брейтмозер</li>
<h2>Розробники APG 1.x</h2>
<ul>
<li>Thialfihar (основний розробник)</li>
<li>'Senecaso' (штрих-код, підпис і завантаження ключів)</li>
<li>Маркус Дойтс</li>
</ul> </ul>
<h2>Бібліотеки</h2> <h2>Бібліотеки</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Бібліотека підтримки Android в.7 'appcompat'</a> (Ліцензія Apache в.2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Бібліотека підтримки Android в.7 'appcompat'</a> (Ліцензія Apache в.2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (ліцензія Apache в. 2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (ліцензія МІТ)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (ліцензія Apache в. 2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (ліцензія Apache в.2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (ліцензія Apache в.2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (ліцензія MIT X11)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (ліцензія MIT X11)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (ліцензія Apache в.2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (ліцензія Apache в.2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Бібліотека Android AppMsg Library</a> (Ліцензія Apache в. 2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Багряний! (Домінік, Вінсент)</li> <li>Багряний! (Домінік, Вінсент)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>деякі виправлення для накопичених вад</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>сертифікації ключів (завдяки Вінсенту Бреймозеру)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>підтримка часткових секретних ключів для GnuPG (завдяки Вінсенту Брейтмозеру)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>новий дизайн для перевірки підпису</li> <li>New design for signature verification</li>
<li>власна довжина ключа (завдяки Ґреґу Вітчаку)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>виправлено функцію поширення з інших програм</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>виправлено опис симетричних повідомлень/файлів pgp</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>перероблено екран редагування ключа (завдяки Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>новий сучасний дизайн для екранів шифрування/розшифрування</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API версія 3 (підтримка кількох профілів, внутрішні зміни, пошук ключа)</li> <li>OpenPGP API версія 3 (підтримка кількох профілів, внутрішні зміни, пошук ключа)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Крім окремих незначних латок, значне число латок зробили наступні люди (у алфавітному порядку): Крім окремих незначних латок, значне число латок зробили наступні люди (у алфавітному порядку):
Даніель Гаман, Даніель Габ, Ґреґ Вітчак, Міроджін Бакші, Ніхіл Петер Радж, Пауль Сарбіновський, Срірам Бояпаті, Вінсент Брейтмосер.</p> Даніель Гаман, Даніель Габ, Ґреґ Вітчак, Міроджін Бакші, Ніхіл Петер Радж, Пауль Сарбіновський, Срірам Бояпаті, Вінсент Брейтмосер.</p>
<ul> <ul>
<li>новий єдиний перелік ключів</li> <li>New unified key list</li>
<li>кольоровий відбиток ключа</li> <li>Colorized key fingerprint</li>
<li>підтримка для портів сервера ключів</li> <li>Support for keyserver ports</li>
<li>деактивувати можливість генерувати слабкі ключі</li> <li>Deactivate possibility to generate weak keys</li>
<li>набагато більше внутрішньої роботи на API</li> <li>Much more internal work on the API</li>
<li>сертифікувати ідентифікатори користувача</li> <li>Certify user ids</li>
<li>запит сервера ключів на основі машиночитабельного виводу</li> <li>Keyserver query based on machine-readable output</li>
<li>блокувати панель навігації на планшетах</li> <li>Lock navigation drawer on tablets</li>
<li>пропозиції для листів при створенні ключів</li> <li>Suggestions for emails on creation of keys</li>
<li>пошук у списках відкритих ключів</li> <li>Search in public key lists</li>
<li>і багато інших покращень та виправлень</li> <li>And much more improvements and fixes</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>свіже виправлення збою при оновленні із старих версій</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>видалений непотрібний експорт публічного ключа при експорті секретного ключа (завдяки Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>виправлено налаштування дат дії ключів (завдяки Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>більше внутрішніх виправлень при редагуванні ключів (завдяки Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>сервери запитаного ключа безпосередньо з екрану імпорту</li> <li>Querying keyservers directly from the import screen</li>
<li>виправлено стиль розмітки і діалогу у Андроїд 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>виправлено збої, коли ключ мав порожній ідентифікатор користувача</li> <li>Fix crash on keys with empty user ids</li>
<li>виправлено збої та порожні списки при поверненні з екрану реєстрації</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (криптографічна бібліотека) оновлена з версії 1.47 до 1.50 та зібрана з коду</li> <li>Bouncy Castle (криптографічна бібліотека) оновлена з версії 1.47 до 1.50 та зібрана з коду</li>
<li>виправлено завантаження ключа з вікна реєстрації</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>новий дизайн з бічною панеллю</li> <li>New design with navigation drawer</li>
<li>новий дизайн списку ключів</li> <li>New public key list design</li>
<li>новий вид перегляду ключа</li> <li>New public key view</li>
<li>виправлення помилок імпорту ключів</li> <li>Bug fixes for importing of keys</li>
<li>Крос-сертифікація ключів (завдяки Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>правильна обробка паролів в UTF-8 (завдяки Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>перша версія з новими мовами (завдяки перекладачам на Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>виправлення і поліпшення передачі ключів через QR коди</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>перевірка підписів пакетів для API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>безліч виправлень помилок</li> <li>Lots of bug fixes</li>
<li>новий API для розробників</li> <li>New API for developers</li>
<li>Виправлення вади генератора випадкових чисел від Google</li> <li>Виправлення вади генератора випадкових чисел від Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>переробка дизайну</li> <li>Complete redesign</li>
<li>передача ключів через QR-коди і NFC</li> <li>Share public keys via qr codes, nfc beam</li>
<li>підписання ключів</li> <li>Sign keys</li>
<li>завантаження на сервер ключів</li> <li>Upload keys to server</li>
<li>виправлення проблем імпорту</li> <li>Fixes import issues</li>
<li>новий AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>підтримка сервера основних ключів</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>більше варіантів збереження кешу пароля: 1, 2, 4, 8 годин</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>переклади: норвезькою (завдяки Сандер Даніельсен), китайською (завдяки Чжан Фредріку)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>виправлення вад</li> <li>Bugfixes</li>
<li>оптимізації</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>виправлення помилки при перевірці підпису тексту з переведенням рядка</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>більше варіантів збереження кешу пароля (20, 40, 60 хвилин)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>виправлення помилки створення запису на Froyo</li> <li>Account adding crash on Froyo fixed</li>
<li>вилучення безпечного файлу</li> <li>Secure file deletion</li>
<li>вилучення файлу ключа після імпорту</li> <li>Option to delete key file after import</li>
<li>передача шифрування (галерея і т. д.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>нові можливості (мова, примусові v3 підписи)</li> <li>New options (language, force v3 signatures)</li>
<li>зміни інтерфейсу</li> <li>Interface changes</li>
<li>виправлення вад</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>Німецький та італійський переклад</li> <li>Німецький та італійський переклад</li>
<li>істотно менший пакунок програми завдяки зменшенню джерел</li> <li>Much smaller package, due to reduced BC sources</li>
<li>нові налаштунки інтерфейсу</li> <li>New preferences GUI</li>
<li>зміна розмітки для локалізації</li> <li>Layout adjustment for localization</li>
<li>виправлення помилки підпису</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>виправлення ще однієї помилки, що виникає в SDK</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>виправлення помилок при шифруванні/підписанні та експорті ключів</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>фільтр списку ключів</li> <li>Filterable key lists</li>
<li>поліпшення вибору ключів шифрування</li> <li>Smarter pre-selection of encryption keys</li>
<li>додана можливість шифрувати файли прямо з файлового менеджера</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>виправлення помилок і нові можливості (попередній вибір ключа) для інтеграції з K-9 Mail, нова бета-збірка доступна</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>інтеграція з K-9 Mail, APG підтримує бета-збірку K-9 Mail</li> <li>інтеграція з K-9 Mail, APG підтримує бета-збірку K-9 Mail</li>
<li>підтримка сторонніх файлових менеджерів (в т.ч. ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Словенський переклад</li> <li>Словенський переклад</li>
<li>нова база даних, швидша робота, менше використання пам'яті</li> <li>New database, much faster, less memory usage</li>
<li>додано обробники для взаємодії з іншими програмами</li> <li>Defined Intents and content provider for other apps</li>
<li>виправлення вад</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -5,27 +5,27 @@
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p> <p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>授權GPLv3+</p> <p>授權GPLv3+</p>
<h2>Developers OpenKeychain</h2> <h2>Developers</h2>
<ul> <ul>
<li>Dominik Schürmann (Lead developer)</li> <li>Dominik Schürmann (Maintainer)</li>
<li>Ash Hughes (crypto patches)</li> <li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li> <li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (介面)</li> <li>Bahtiar 'kalkin' Gadimov</li>
<li>Daniel Albert</li>
<li>Daniel Hammann</li> <li>Daniel Hammann</li>
<li>Daniel Haß</li> <li>Daniel Haß</li>
<li>Greg Witczak</li> <li>Greg Witczak</li>
<li>'mar-v-in'</li>
<li>Markus Doits</li>
<li>Miroojin Bakshi</li> <li>Miroojin Bakshi</li>
<li>Nikhil Peter Raj</li> <li>Nikhil Peter Raj</li>
<li>Paul Sarbinowski</li> <li>Paul Sarbinowski</li>
<li>'Senecaso'</li>
<li>Sreeram Boyapati</li> <li>Sreeram Boyapati</li>
<li>Vincent Breitmoser</li> <li>Thialfihar (APG 1.x)</li>
<li>Tim Bray</li> <li>Tim Bray</li>
</ul> <li>Vincent Breitmoser</li>
<h2>Developers APG 1.x</h2>
<ul>
<li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Markus Doits</li>
</ul> </ul>
<h2>函式庫</h2> <h2>函式庫</h2>
<ul> <ul>
@ -34,17 +34,21 @@
<li> <li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li> <a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li> <a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li> <a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
<li>
<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
<li>
<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li> <li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li> <a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li> <li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li> <li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,20 @@
<html> <html>
<head></head> <head></head>
<body> <body>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2> <h2>2.7</h2>
<ul> <ul>
<li>Purple! (Dominik, Vincent)</li> <li>Purple! (Dominik, Vincent)</li>
@ -11,21 +25,21 @@
</ul> </ul>
<h2>2.6.1</h2> <h2>2.6.1</h2>
<ul> <ul>
<li>some fixes for regression bugs</li> <li>Some fixes for regression bugs</li>
</ul> </ul>
<h2>2.6</h2> <h2>2.6</h2>
<ul> <ul>
<li>key certifications (thanks to Vincent Breitmoser)</li> <li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li> <li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>new design for signature verification</li> <li>New design for signature verification</li>
<li>custom key length (thanks to Greg Witczak)</li> <li>Custom key length (thanks to Greg Witczak)</li>
<li>fix share-functionality from other apps</li> <li>Fix share-functionality from other apps</li>
</ul> </ul>
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>fix decryption of symmetric pgp messages/files</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>refactored edit key screen (thanks to Ash Hughes)</li> <li>Refactored edit key screen (thanks to Ash Hughes)</li>
<li>new modern design for encrypt/decrypt screens</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li> <li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul> </ul>
<h2>2.4</h2> <h2>2.4</h2>
@ -33,45 +47,45 @@
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order): Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p> Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul> <ul>
<li>new unified key list</li> <li>New unified key list</li>
<li>colorized key fingerprint</li> <li>Colorized key fingerprint</li>
<li>support for keyserver ports</li> <li>Support for keyserver ports</li>
<li>deactivate possibility to generate weak keys</li> <li>Deactivate possibility to generate weak keys</li>
<li>much more internal work on the API</li> <li>Much more internal work on the API</li>
<li>certify user ids</li> <li>Certify user ids</li>
<li>keyserver query based on machine-readable output</li> <li>Keyserver query based on machine-readable output</li>
<li>lock navigation drawer on tablets</li> <li>Lock navigation drawer on tablets</li>
<li>suggestions for emails on creation of keys</li> <li>Suggestions for emails on creation of keys</li>
<li>search in public key lists</li> <li>Search in public key lists</li>
<li>and much more improvements and fixes…</li> <li>And much more improvements and fixes…</li>
</ul> </ul>
<h2>2.3.1</h2> <h2>2.3.1</h2>
<ul> <ul>
<li>hotfix for crash when upgrading from old versions</li> <li>Hotfix for crash when upgrading from old versions</li>
</ul> </ul>
<h2>2.3</h2> <h2>2.3</h2>
<ul> <ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li> <li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li> <li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li> <li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li> <li>Querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li> <li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li> <li>Fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li> <li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li> <li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li> <li>Fix upload of key from signing screen</li>
</ul> </ul>
<h2>2.2</h2> <h2>2.2</h2>
<ul> <ul>
<li>new design with navigation drawer</li> <li>New design with navigation drawer</li>
<li>new public key list design</li> <li>New public key list design</li>
<li>new public key view</li> <li>New public key view</li>
<li>bug fixes for importing of keys</li> <li>Bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li> <li>Key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li> <li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li> <li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li> <li>Sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li> <li>Package signature verification for API</li>
</ul> </ul>
<h2>2.1.1</h2> <h2>2.1.1</h2>
<ul> <ul>
@ -79,65 +93,65 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul> </ul>
<h2>2.1</h2> <h2>2.1</h2>
<ul> <ul>
<li>lots of bug fixes</li> <li>Lots of bug fixes</li>
<li>new API for developers</li> <li>New API for developers</li>
<li>PRNG bug fix by Google</li> <li>PRNG bug fix by Google</li>
</ul> </ul>
<h2>2.0</h2> <h2>2.0</h2>
<ul> <ul>
<li>complete redesign</li> <li>Complete redesign</li>
<li>share public keys via qr codes, nfc beam</li> <li>Share public keys via qr codes, nfc beam</li>
<li>sign keys</li> <li>Sign keys</li>
<li>upload keys to server</li> <li>Upload keys to server</li>
<li>fixes import issues</li> <li>Fixes import issues</li>
<li>new AIDL API</li> <li>New AIDL API</li>
</ul> </ul>
<h2>1.0.8</h2> <h2>1.0.8</h2>
<ul> <ul>
<li>basic keyserver support</li> <li>Basic keyserver support</li>
<li>app2sd</li> <li>App2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li> <li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li> <li>Bugfixes</li>
<li>optimizations</li> <li>Optimizations</li>
</ul> </ul>
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>fixed problem with signature verification of texts with trailing newline</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li> <li>More options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>
<ul> <ul>
<li>account adding crash on Froyo fixed</li> <li>Account adding crash on Froyo fixed</li>
<li>secure file deletion</li> <li>Secure file deletion</li>
<li>option to delete key file after import</li> <li>Option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li> <li>Stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li> <li>New options (language, force v3 signatures)</li>
<li>interface changes</li> <li>Interface changes</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
<h2>1.0.5</h2> <h2>1.0.5</h2>
<ul> <ul>
<li>German and Italian translation</li> <li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li> <li>Much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li> <li>New preferences GUI</li>
<li>layout adjustment for localization</li> <li>Layout adjustment for localization</li>
<li>signature bugfix</li> <li>Signature bugfix</li>
</ul> </ul>
<h2>1.0.4</h2> <h2>1.0.4</h2>
<ul> <ul>
<li>fixed another crash caused by some SDK bug with query builder</li> <li>Fixed another crash caused by some SDK bug with query builder</li>
</ul> </ul>
<h2>1.0.3</h2> <h2>1.0.3</h2>
<ul> <ul>
<li>fixed crashes during encryption/signing and possibly key export</li> <li>Fixed crashes during encryption/signing and possibly key export</li>
</ul> </ul>
<h2>1.0.2</h2> <h2>1.0.2</h2>
<ul> <ul>
<li>filterable key lists</li> <li>Filterable key lists</li>
<li>smarter pre-selection of encryption keys</li> <li>Smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li> <li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li> <li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul> </ul>
<h2>1.0.1</h2> <h2>1.0.1</h2>
<ul> <ul>
@ -146,11 +160,11 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.0</h2> <h2>1.0.0</h2>
<ul> <ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li> <li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li> <li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li> <li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li> <li>New database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li> <li>Defined Intents and content provider for other apps</li>
<li>bugfixes</li> <li>Bugfixes</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -11,7 +11,7 @@ And don't add newlines before or after p tags because of transifex -->
<li>Key edit: awesome new design, key revocation</li> <li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li> <li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li> <li>New first time screen</li>
<li>New create key screen: autocompletion of name and email based on your personal Android accounts</li> <li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li> <li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li> <li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li> <li>Important bug fix: Importing of large key collections from a file is now possible</li>
@ -45,7 +45,7 @@ And don't add newlines before or after p tags because of transifex -->
<h2>2.5</h2> <h2>2.5</h2>
<ul> <ul>
<li>Fix decryption of symmetric pgp messages/files</li> <li>Fix decryption of symmetric pgp messages/files</li>
<li>Refactored edit key screen (thanks to Ash Hughes)</li> <li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li> <li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li> <li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul> </ul>
@ -125,7 +125,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<ul> <ul>
<li>Basic keyserver support</li> <li>Basic keyserver support</li>
<li>App2sd</li> <li>App2sd</li>
<li>More choices for pass phrase cache: 1, 2, 4, 8, hours</li> <li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li> <li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li> <li>Bugfixes</li>
<li>Optimizations</li> <li>Optimizations</li>
@ -134,7 +134,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.7</h2> <h2>1.0.7</h2>
<ul> <ul>
<li>Fixed problem with signature verification of texts with trailing newline</li> <li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for pass phrase cache time to live (20, 40, 60 mins)</li> <li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul> </ul>
<h2>1.0.6</h2> <h2>1.0.6</h2>

View File

@ -1,43 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--title-->
<!--section-->
<!--button-->
<!--menu-->
<!--label-->
<!--choice-->
<!--key flags-->
<!--sentences-->
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<!--errors without preceeding Error:-->
<!--results shown after decryption/verification-->
<!--progress dialogs, usually ending in '…'-->
<!--action strings-->
<!--key bit length selections-->
<!--compression-->
<!--Help-->
<!--Import-->
<!--Import result toast-->
<!--Intent labels-->
<!--Remote API-->
<!--Share-->
<!--Key list-->
<!--Key view-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
<!--Navigation Drawer-->
<!--hints-->
<!--certs-->
<!--Import Public log entries-->
<!--Import Secret log entries-->
<!--Keyring Canonicalization log entries-->
<!--Keyring merging log entries-->
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
</resources>

View File

@ -34,7 +34,6 @@
<string name="btn_save">Uložit</string> <string name="btn_save">Uložit</string>
<string name="btn_do_not_save">Zrušit</string> <string name="btn_do_not_save">Zrušit</string>
<string name="btn_delete">Smazat</string> <string name="btn_delete">Smazat</string>
<string name="btn_no_date">Nic</string>
<string name="btn_okay">OK</string> <string name="btn_okay">OK</string>
<string name="btn_export_to_server">Nahrát na keyserver</string> <string name="btn_export_to_server">Nahrát na keyserver</string>
<string name="btn_next">Další</string> <string name="btn_next">Další</string>
@ -57,7 +56,6 @@
<string name="label_no_passphrase">Bez hesla</string> <string name="label_no_passphrase">Bez hesla</string>
<string name="label_passphrase">Heslo</string> <string name="label_passphrase">Heslo</string>
<string name="label_algorithm">Algoritmus</string> <string name="label_algorithm">Algoritmus</string>
<string name="label_ascii_armor">ASCII Armor</string>
<string name="label_delete_after_decryption">Smazat po rozšifrování</string> <string name="label_delete_after_decryption">Smazat po rozšifrování</string>
<string name="label_encryption_algorithm">Šifrovací algoritmus</string> <string name="label_encryption_algorithm">Šifrovací algoritmus</string>
<string name="label_hash_algorithm">Hashovací algoritmus</string> <string name="label_hash_algorithm">Hashovací algoritmus</string>
@ -198,7 +196,6 @@
<string name="key_size_8192">8192</string> <string name="key_size_8192">8192</string>
<string name="key_size_custom">Vlastní velikost klíče</string> <string name="key_size_custom">Vlastní velikost klíče</string>
<string name="key_size_custom_info">Napište vlastní délku klíče (v bitech):</string> <string name="key_size_custom_info">Napište vlastní délku klíče (v bitech):</string>
<string name="key_size_custom_info_rsa">délka RSA klíče musí být větší než 1024 a nejvýše 8192. Zároveň musí být dělitelná 8mi.</string>
<string name="key_size_custom_info_dsa">Délka DSA klíče musí být alespoň 512 a nejvýše 1024. Zároveň musí být dělitelná 64.</string> <string name="key_size_custom_info_dsa">Délka DSA klíče musí být alespoň 512 a nejvýše 1024. Zároveň musí být dělitelná 64.</string>
<!--compression--> <!--compression-->
<string name="compression_fast">rychle</string> <string name="compression_fast">rychle</string>

View File

@ -6,7 +6,6 @@
<string name="title_encrypt">Verschlüsseln</string> <string name="title_encrypt">Verschlüsseln</string>
<string name="title_decrypt">Entschlüsseln</string> <string name="title_decrypt">Entschlüsseln</string>
<string name="title_authentication">Passwort</string> <string name="title_authentication">Passwort</string>
<string name="title_create_key">Erzeuge Deinen Schlüssel</string>
<string name="title_edit_key">Schlüssel bearbeiten</string> <string name="title_edit_key">Schlüssel bearbeiten</string>
<string name="title_preferences">Einstellungen</string> <string name="title_preferences">Einstellungen</string>
<string name="title_api_registered_apps">Apps</string> <string name="title_api_registered_apps">Apps</string>
@ -15,6 +14,7 @@
<string name="title_share_fingerprint_with">Teile Fingerabdruck über…</string> <string name="title_share_fingerprint_with">Teile Fingerabdruck über…</string>
<string name="title_share_key">Teile Schlüssel über...</string> <string name="title_share_key">Teile Schlüssel über...</string>
<string name="title_share_file">Datei teilen mit…</string> <string name="title_share_file">Datei teilen mit…</string>
<string name="title_share_message">Teile Nachricht über…</string>
<string name="title_encrypt_to_file">In eine Datei verschlüsseln</string> <string name="title_encrypt_to_file">In eine Datei verschlüsseln</string>
<string name="title_decrypt_to_file">In eine Datei entschlüsseln</string> <string name="title_decrypt_to_file">In eine Datei entschlüsseln</string>
<string name="title_import_keys">Schlüssel importieren</string> <string name="title_import_keys">Schlüssel importieren</string>
@ -43,17 +43,19 @@
<string name="btn_decrypt_verify_file">Datei entschlüsseln, verifizieren und speichern</string> <string name="btn_decrypt_verify_file">Datei entschlüsseln, verifizieren und speichern</string>
<string name="btn_decrypt_verify_message">Entschlüsseln und verifizieren</string> <string name="btn_decrypt_verify_message">Entschlüsseln und verifizieren</string>
<string name="btn_encrypt_file">Datei verschlüsseln und speichern</string> <string name="btn_encrypt_file">Datei verschlüsseln und speichern</string>
<string name="btn_encrypt_share_file">Datei verschlüsseln und teilen</string>
<string name="btn_save">Speichern</string> <string name="btn_save">Speichern</string>
<string name="btn_do_not_save">Abbrechen</string> <string name="btn_do_not_save">Abbrechen</string>
<string name="btn_delete">Löschen</string> <string name="btn_delete">Löschen</string>
<string name="btn_no_date">Keine</string>
<string name="btn_okay">Okay</string> <string name="btn_okay">Okay</string>
<string name="btn_export_to_server">Auf Schlüsselserver hochladen</string> <string name="btn_export_to_server">Auf Schlüsselserver hochladen</string>
<string name="btn_next">Weiter</string> <string name="btn_next">Weiter</string>
<string name="btn_back">Zurück</string> <string name="btn_back">Zurück</string>
<string name="btn_lookup_key">Schlüssel nachschlagen</string> <string name="btn_lookup_key">Schlüssel nachschlagen</string>
<string name="btn_share_encrypted_signed">Entschlüsseln und teilen</string>
<string name="btn_view_cert_key">Beglaubigungsschlüssel anzeigen</string> <string name="btn_view_cert_key">Beglaubigungsschlüssel anzeigen</string>
<string name="btn_create_key">Erzeuge Schlüssel</string> <string name="btn_create_key">Schlüssel erzeugen</string>
<string name="btn_add_files">Datei(en) hinzufügen</string>
<!--menu--> <!--menu-->
<string name="menu_preferences">Einstellungen</string> <string name="menu_preferences">Einstellungen</string>
<string name="menu_help">Hilfe</string> <string name="menu_help">Hilfe</string>
@ -72,16 +74,23 @@
<!--label--> <!--label-->
<string name="label_message">Nachricht</string> <string name="label_message">Nachricht</string>
<string name="label_file">Datei</string> <string name="label_file">Datei</string>
<string name="label_files">Datei(en)</string>
<string name="label_file_colon">Datei:</string>
<string name="label_no_passphrase">Kein Passwort</string> <string name="label_no_passphrase">Kein Passwort</string>
<string name="label_passphrase">Passwort</string> <string name="label_passphrase">Passwort</string>
<string name="label_passphrase_again">Passwort wiederholen</string> <string name="label_passphrase_again">Passwort wiederholen</string>
<string name="label_algorithm">Algorithmus</string> <string name="label_algorithm">Algorithmus</string>
<string name="label_ascii_armor">ASCII-Armor</string> <string name="label_file_ascii_armor">Datei: ASCII Armor</string>
<string name="label_conceal_pgp_application">Lass andere wissen dass du OpenKeychain nutzt</string> <string name="label_write_version_header">Lass andere wissen dass du OpenKeychain nutzt</string>
<string name="label_conceal_pgp_application_summary">Fügt \'OpenKeychain v2.7\' zu OpenPGP Signaturen, Daten und exportierten Schlüsseln hinzu</string> <string name="label_write_version_header_summary">Fügt \'OpenKeychain v2.7\' zu OpenPGP Signaturen, Daten und exportierten Schlüsseln hinzu</string>
<string name="label_asymmetric_from">Von:</string>
<string name="label_to">An:</string>
<string name="label_delete_after_encryption">Dateien: Nach Verschlüsselung löschen</string>
<string name="label_delete_after_decryption">Nach Entschlüsselung löschen</string> <string name="label_delete_after_decryption">Nach Entschlüsselung löschen</string>
<string name="label_encryption_algorithm">Verschlüsselungsalgorithmus</string> <string name="label_encryption_algorithm">Verschlüsselungsalgorithmus</string>
<string name="label_hash_algorithm">Hash-Algorithmus</string> <string name="label_hash_algorithm">Hash-Algorithmus</string>
<string name="label_asymmetric">Mit Schlüssel</string>
<string name="label_symmetric">Mit Passwort</string>
<string name="label_passphrase_cache_ttl">Passwort-Cache</string> <string name="label_passphrase_cache_ttl">Passwort-Cache</string>
<string name="label_message_compression">Nachrichten-Komprimierung</string> <string name="label_message_compression">Nachrichten-Komprimierung</string>
<string name="label_file_compression">Datei-Komprimierung</string> <string name="label_file_compression">Datei-Komprimierung</string>
@ -274,7 +283,6 @@
<string name="key_size_8192">8192</string> <string name="key_size_8192">8192</string>
<string name="key_size_custom">Benutzerdefinierte Schlüssellänge</string> <string name="key_size_custom">Benutzerdefinierte Schlüssellänge</string>
<string name="key_size_custom_info">Benutzerdefinierte Schlüssellänge (in Bit):</string> <string name="key_size_custom_info">Benutzerdefinierte Schlüssellänge (in Bit):</string>
<string name="key_size_custom_info_rsa">Die RSA-Schlüssellänge muss größer als 1024 sein und höchstens 8192 sein. Auch muss sie ein Mehrfaches von 8 sein.</string>
<string name="key_size_custom_info_dsa">Die DSA-Schlüssellänge muss mindestens 512 und höchstens 1024 sein. Auch muss sie ein Mehrfaches von 64 sein.</string> <string name="key_size_custom_info_dsa">Die DSA-Schlüssellänge muss mindestens 512 und höchstens 1024 sein. Auch muss sie ein Mehrfaches von 64 sein.</string>
<!--compression--> <!--compression-->
<string name="compression_fast">schnell</string> <string name="compression_fast">schnell</string>
@ -380,6 +388,7 @@
<string name="drawer_close">Menü schließen</string> <string name="drawer_close">Menü schließen</string>
<string name="my_keys">Meine Schlüssel</string> <string name="my_keys">Meine Schlüssel</string>
<!--hints--> <!--hints-->
<string name="encrypt_content_edit_text_hint">Die eingegebene Nachricht wird mit dem in \'Von\' ausgewählten Schlüssel signiert und für alle Empfänger in \'An\' verschlüsselt.</string>
<string name="decrypt_content_edit_text_hint">Hier die verschlüsselte Nachricht eingeben um sie zu entschlüsseln und/oder zu verifizieren…</string> <string name="decrypt_content_edit_text_hint">Hier die verschlüsselte Nachricht eingeben um sie zu entschlüsseln und/oder zu verifizieren…</string>
<!--certs--> <!--certs-->
<string name="cert_default">normal</string> <string name="cert_default">normal</string>

View File

@ -1,59 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--title-->
<string name="title_authentication">Κωδικός</string>
<string name="title_edit_key">Επεξεργασία Κλειδιού</string>
<string name="title_preferences">Επιλογές</string>
<!--section-->
<!--button-->
<string name="btn_save">Αποθήκευση</string>
<string name="btn_do_not_save">Ακύρωση</string>
<string name="btn_delete">Διαγραφή</string>
<string name="btn_no_date">Κανένα</string>
<string name="btn_okay">ΟΚ</string>
<!--menu-->
<string name="menu_delete_key">Διαγραφής κλειδιού</string>
<!--label-->
<string name="label_message">Μήνυμα</string>
<string name="label_file">Αρχείο</string>
<string name="label_passphrase">Κωδικός</string>
<string name="label_algorithm">Αλγόριθμος</string>
<string name="label_encryption_algorithm">Αλγόριθμος κρυπτογράφησης</string>
<string name="label_key_size">Μέγεθος κλειδιού</string>
<string name="label_email">Ηλεκτρονικό ταχυδρομίο</string>
<!--choice-->
<!--key flags-->
<!--sentences-->
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<!--errors without preceeding Error:-->
<!--results shown after decryption/verification-->
<!--progress dialogs, usually ending in '…'-->
<!--action strings-->
<!--key bit length selections-->
<!--compression-->
<!--Help-->
<!--Import-->
<!--Import result toast-->
<!--Intent labels-->
<!--Remote API-->
<!--Share-->
<!--Key list-->
<!--Key view-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
<!--Navigation Drawer-->
<!--hints-->
<!--certs-->
<!--Import Public log entries-->
<!--Import Secret log entries-->
<!--Keyring Canonicalization log entries-->
<!--Keyring merging log entries-->
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
</resources>

View File

@ -6,7 +6,7 @@
<string name="title_encrypt">Cifrar</string> <string name="title_encrypt">Cifrar</string>
<string name="title_decrypt">Descifrar</string> <string name="title_decrypt">Descifrar</string>
<string name="title_authentication">Frase de contraseña</string> <string name="title_authentication">Frase de contraseña</string>
<string name="title_create_key">Crear mi clave</string> <string name="title_add_subkey">Añadir subclave</string>
<string name="title_edit_key"> Editar clave</string> <string name="title_edit_key"> Editar clave</string>
<string name="title_preferences"> Preferencias</string> <string name="title_preferences"> Preferencias</string>
<string name="title_api_registered_apps">Aplicaciones</string> <string name="title_api_registered_apps">Aplicaciones</string>
@ -15,6 +15,7 @@
<string name="title_share_fingerprint_with">Compartir huella de validación de clave con...</string> <string name="title_share_fingerprint_with">Compartir huella de validación de clave con...</string>
<string name="title_share_key">Compartir clave con...</string> <string name="title_share_key">Compartir clave con...</string>
<string name="title_share_file">Compartir fichero con...</string> <string name="title_share_file">Compartir fichero con...</string>
<string name="title_share_message">Compartir mensaje con...</string>
<string name="title_encrypt_to_file">Cifrar hacia archivo</string> <string name="title_encrypt_to_file">Cifrar hacia archivo</string>
<string name="title_decrypt_to_file">Descifrar hacia archivo</string> <string name="title_decrypt_to_file">Descifrar hacia archivo</string>
<string name="title_import_keys">Importar claves</string> <string name="title_import_keys">Importar claves</string>
@ -47,7 +48,7 @@
<string name="btn_save">Guardar</string> <string name="btn_save">Guardar</string>
<string name="btn_do_not_save">Cancelar</string> <string name="btn_do_not_save">Cancelar</string>
<string name="btn_delete">Eliminar</string> <string name="btn_delete">Eliminar</string>
<string name="btn_no_date">Ninguno</string> <string name="btn_no_date">Sin fecha de expiración</string>
<string name="btn_okay">De acuerdo</string> <string name="btn_okay">De acuerdo</string>
<string name="btn_export_to_server">Cargar al servidor de claves</string> <string name="btn_export_to_server">Cargar al servidor de claves</string>
<string name="btn_next">Siguiente</string> <string name="btn_next">Siguiente</string>
@ -81,12 +82,12 @@
<string name="label_passphrase">Frase de contraseña</string> <string name="label_passphrase">Frase de contraseña</string>
<string name="label_passphrase_again">Repeat Passphrase</string> <string name="label_passphrase_again">Repeat Passphrase</string>
<string name="label_algorithm">Algoritmo</string> <string name="label_algorithm">Algoritmo</string>
<string name="label_ascii_armor">Armadura ASCII</string> <string name="label_ascii_armor">Armadura ASCII del fichero</string>
<string name="label_file_ascii_armor">Ficheros: Armadura ASCII</string> <string name="label_file_ascii_armor">Ficheros: Armadura ASCII</string>
<string name="label_conceal_pgp_application">Permitir a otros saber que está usando OpenKeychain</string> <string name="label_write_version_header">Permitir a otros saber que está usando OpenKeychain</string>
<string name="label_conceal_pgp_application_summary">Escribe \'OpenKeychain v2.7\' en las firmas OpenPGP, el texto cifrado, y las claves exportadas</string> <string name="label_write_version_header_summary">Escribe \'OpenKeychain v2.7\' en las firmas OpenPGP, el texto cifrado, y las claves exportadas</string>
<string name="label_asymmetric_from">Desde:</string> <string name="label_asymmetric_from">Desde:</string>
<string name="label_to">Hacia: </string> <string name="label_to">Hacia:</string>
<string name="label_delete_after_encryption">Ficheros: Borrar después del cifrado</string> <string name="label_delete_after_encryption">Ficheros: Borrar después del cifrado</string>
<string name="label_delete_after_decryption">Borrar después del descifrado</string> <string name="label_delete_after_decryption">Borrar después del descifrado</string>
<string name="label_encryption_algorithm">Algoritmo de cifrado</string> <string name="label_encryption_algorithm">Algoritmo de cifrado</string>
@ -288,7 +289,7 @@
<string name="key_size_8192">8192</string> <string name="key_size_8192">8192</string>
<string name="key_size_custom">Tamaño de clave personalizado</string> <string name="key_size_custom">Tamaño de clave personalizado</string>
<string name="key_size_custom_info">Escriba el tamaño personalizado de la clave (en bits):</string> <string name="key_size_custom_info">Escriba el tamaño personalizado de la clave (en bits):</string>
<string name="key_size_custom_info_rsa">El tamaño de la clave RSA debe de un mínimo de 1024 y un máximo de 8192. También debe ser múltiplo de 8.</string> <string name="key_size_custom_info_rsa">El tamaño de la clave RSA tiene que ser mayor que 1024 y como mucho de 16384. También debe ser un múltiplo de 8.</string>
<string name="key_size_custom_info_dsa">El tamaño de la clave DSA debe ser de un mínimo de 512 y un máximo de 1024. También debe ser múltiplo de 64.</string> <string name="key_size_custom_info_dsa">El tamaño de la clave DSA debe ser de un mínimo de 512 y un máximo de 1024. También debe ser múltiplo de 64.</string>
<!--compression--> <!--compression-->
<string name="compression_fast">rápido</string> <string name="compression_fast">rápido</string>
@ -397,11 +398,16 @@
<item>Cambiar a la identidad primaria</item> <item>Cambiar a la identidad primaria</item>
<item>Revocar identidad</item> <item>Revocar identidad</item>
</string-array> </string-array>
<string-array name="edit_key_edit_user_id_revert_revocation">
<item>Revertir revocación</item>
</string-array>
<string name="edit_key_edit_user_id_revoked">Esta identidad se ha revocado. Esto no puede deshacerse.</string>
<string name="edit_key_edit_subkey_title">¡Seleccione una acción!</string> <string name="edit_key_edit_subkey_title">¡Seleccione una acción!</string>
<string-array name="edit_key_edit_subkey"> <string-array name="edit_key_edit_subkey">
<item>Cambiar periodo hasta la expiración</item> <item>Cambiar periodo hasta la expiración</item>
<item>Revocar subclave</item> <item>Revocar subclave</item>
</string-array> </string-array>
<string name="edit_key_new_subkey">nueva</string>
<!--Create key--> <!--Create key-->
<string name="create_key_upload">Subir clave al servidor de claves</string> <string name="create_key_upload">Subir clave al servidor de claves</string>
<string name="create_key_empty">Este campo es obligatorio</string> <string name="create_key_empty">Este campo es obligatorio</string>

View File

@ -6,7 +6,7 @@
<string name="title_encrypt">Chiffrer</string> <string name="title_encrypt">Chiffrer</string>
<string name="title_decrypt">Déchiffrer</string> <string name="title_decrypt">Déchiffrer</string>
<string name="title_authentication">Phrase de passe</string> <string name="title_authentication">Phrase de passe</string>
<string name="title_create_key">Créer ma clef</string> <string name="title_add_subkey">Ajouter une sous-clef</string>
<string name="title_edit_key">Modifier une clef</string> <string name="title_edit_key">Modifier une clef</string>
<string name="title_preferences">Préférences</string> <string name="title_preferences">Préférences</string>
<string name="title_api_registered_apps">Applis</string> <string name="title_api_registered_apps">Applis</string>
@ -15,6 +15,7 @@
<string name="title_share_fingerprint_with">Partager l\'empreinte avec...</string> <string name="title_share_fingerprint_with">Partager l\'empreinte avec...</string>
<string name="title_share_key">Partager la clef avec...</string> <string name="title_share_key">Partager la clef avec...</string>
<string name="title_share_file">Partager le fichier avec...</string> <string name="title_share_file">Partager le fichier avec...</string>
<string name="title_share_message">Partager le message avec...</string>
<string name="title_encrypt_to_file">Chiffrer vers un fichier</string> <string name="title_encrypt_to_file">Chiffrer vers un fichier</string>
<string name="title_decrypt_to_file">Déchiffrer vers un fichier</string> <string name="title_decrypt_to_file">Déchiffrer vers un fichier</string>
<string name="title_import_keys">importer des clefs</string> <string name="title_import_keys">importer des clefs</string>
@ -43,17 +44,20 @@
<string name="btn_decrypt_verify_file">Déchiffrer, vérifier et enregistrer le fichier</string> <string name="btn_decrypt_verify_file">Déchiffrer, vérifier et enregistrer le fichier</string>
<string name="btn_decrypt_verify_message">Déchiffrer et enregistrer le message</string> <string name="btn_decrypt_verify_message">Déchiffrer et enregistrer le message</string>
<string name="btn_encrypt_file">Chiffrer et enregistrer le fichier</string> <string name="btn_encrypt_file">Chiffrer et enregistrer le fichier</string>
<string name="btn_encrypt_share_file">Chiffrer et partager le fichier</string>
<string name="btn_save">Enregistrer</string> <string name="btn_save">Enregistrer</string>
<string name="btn_do_not_save">Annuler</string> <string name="btn_do_not_save">Annuler</string>
<string name="btn_delete">Supprimer</string> <string name="btn_delete">Supprimer</string>
<string name="btn_no_date">Aucune</string> <string name="btn_no_date">Pas d\'expiration</string>
<string name="btn_okay">OK</string> <string name="btn_okay">OK</string>
<string name="btn_export_to_server">Téléverser vers le serveur de clefs</string> <string name="btn_export_to_server">Téléverser vers le serveur de clefs</string>
<string name="btn_next">Suivant</string> <string name="btn_next">Suivant</string>
<string name="btn_back">Retour</string> <string name="btn_back">Retour</string>
<string name="btn_lookup_key">Rechercher la clef</string> <string name="btn_lookup_key">Rechercher la clef</string>
<string name="btn_share_encrypted_signed">Chiffrer et partager le message</string>
<string name="btn_view_cert_key">Voir la clef de certification</string> <string name="btn_view_cert_key">Voir la clef de certification</string>
<string name="btn_create_key">Créer la clef</string> <string name="btn_create_key">Créer la clef</string>
<string name="btn_add_files">Ajouter un/des fichier(s)</string>
<!--menu--> <!--menu-->
<string name="menu_preferences">Paramètres</string> <string name="menu_preferences">Paramètres</string>
<string name="menu_help">Aide</string> <string name="menu_help">Aide</string>
@ -72,16 +76,24 @@
<!--label--> <!--label-->
<string name="label_message">Message</string> <string name="label_message">Message</string>
<string name="label_file">Fichier</string> <string name="label_file">Fichier</string>
<string name="label_files">Fichier(s)</string>
<string name="label_file_colon">Fichier :</string>
<string name="label_no_passphrase">Aucune phrase de passe</string> <string name="label_no_passphrase">Aucune phrase de passe</string>
<string name="label_passphrase">Phrase de passe</string> <string name="label_passphrase">Phrase de passe</string>
<string name="label_passphrase_again">Répéter la phrase de passe</string> <string name="label_passphrase_again">Répéter la phrase de passe</string>
<string name="label_algorithm">Algorithme</string> <string name="label_algorithm">Algorithme</string>
<string name="label_ascii_armor">Armure ASCII</string> <string name="label_ascii_armor">Fichier ASCII Armor</string>
<string name="label_conceal_pgp_application">Informez les autres de votre utilisation d\'OpenKeychain</string> <string name="label_file_ascii_armor">Fichier : ASCII Armor</string>
<string name="label_conceal_pgp_application_summary">Ajoute « OpenKeychain v2.7 » aux signatures OpenPGP, aux cryptogrammes, et aux clefs exportées</string> <string name="label_write_version_header">Informez les autres de votre utilisation d\'OpenKeychain</string>
<string name="label_write_version_header_summary">Ajoute « OpenKeychain v2.7 » aux signatures OpenPGP, aux cryptogrammes, et aux clefs exportées</string>
<string name="label_asymmetric_from">De :</string>
<string name="label_to">À :</string>
<string name="label_delete_after_encryption">Fichier : supprimer après chiffrement</string>
<string name="label_delete_after_decryption">Supprimer après le chiffrement</string> <string name="label_delete_after_decryption">Supprimer après le chiffrement</string>
<string name="label_encryption_algorithm">Algorithme de chiffrement</string> <string name="label_encryption_algorithm">Algorithme de chiffrement</string>
<string name="label_hash_algorithm">Algorithme de hachage</string> <string name="label_hash_algorithm">Algorithme de hachage</string>
<string name="label_asymmetric">Avec une clef publique</string>
<string name="label_symmetric">Avec une phrase de passe</string>
<string name="label_passphrase_cache_ttl">Cache de la phrase de passe</string> <string name="label_passphrase_cache_ttl">Cache de la phrase de passe</string>
<string name="label_message_compression">Compression des messages</string> <string name="label_message_compression">Compression des messages</string>
<string name="label_file_compression">Compression des fichiers</string> <string name="label_file_compression">Compression des fichiers</string>
@ -277,7 +289,7 @@
<string name="key_size_8192">8192</string> <string name="key_size_8192">8192</string>
<string name="key_size_custom">Taille de clef personnalisée</string> <string name="key_size_custom">Taille de clef personnalisée</string>
<string name="key_size_custom_info">Taper la longueur de la clef personnalisée (bits)</string> <string name="key_size_custom_info">Taper la longueur de la clef personnalisée (bits)</string>
<string name="key_size_custom_info_rsa">La longueur d\'une clef RSA doit être comprise entre 1024 et 8192 inclusivement. Elle doit aussi être un multiple de 8.</string> <string name="key_size_custom_info_rsa">La longueur d\'une clef RSA doit être supérieure à 1024 et au plus 16384. Elle doit aussi être un multiple de 8.</string>
<string name="key_size_custom_info_dsa">La longueur d\'une clef DSA doit être comprise entre 512 et 1024 inclusivement. Elle doit aussi être un multiple de 64.</string> <string name="key_size_custom_info_dsa">La longueur d\'une clef DSA doit être comprise entre 512 et 1024 inclusivement. Elle doit aussi être un multiple de 64.</string>
<!--compression--> <!--compression-->
<string name="compression_fast">rapide</string> <string name="compression_fast">rapide</string>
@ -386,11 +398,16 @@
<item>Changer en identité principale</item> <item>Changer en identité principale</item>
<item>Révoquer l\'identité</item> <item>Révoquer l\'identité</item>
</string-array> </string-array>
<string-array name="edit_key_edit_user_id_revert_revocation">
<item>Renverser la révocation</item>
</string-array>
<string name="edit_key_edit_user_id_revoked">Cette identité a été révoquée ! Ceci ne peut pas être annulé.</string>
<string name="edit_key_edit_subkey_title">Choisissez une action !</string> <string name="edit_key_edit_subkey_title">Choisissez une action !</string>
<string-array name="edit_key_edit_subkey"> <string-array name="edit_key_edit_subkey">
<item>Changer l\'expiration</item> <item>Changer l\'expiration</item>
<item>Révoquer la sous-clef</item> <item>Révoquer la sous-clef</item>
</string-array> </string-array>
<string name="edit_key_new_subkey">nouvelle</string>
<!--Create key--> <!--Create key-->
<string name="create_key_upload">Téléverser la clef vers le serveur de clefs</string> <string name="create_key_upload">Téléverser la clef vers le serveur de clefs</string>
<string name="create_key_empty">Ce champ est exigé</string> <string name="create_key_empty">Ce champ est exigé</string>
@ -411,6 +428,7 @@
<string name="drawer_close">Fermer le tiroir de navigation</string> <string name="drawer_close">Fermer le tiroir de navigation</string>
<string name="my_keys">Mes clefs</string> <string name="my_keys">Mes clefs</string>
<!--hints--> <!--hints-->
<string name="encrypt_content_edit_text_hint">Le message saisi ici sera signé en utilisant la clef choisie « De » et chiffré pour tous les destinataires choisies « À ».</string>
<string name="decrypt_content_edit_text_hint">Saisir le cryptogramme à déchiffrer et/ou à vérifier ici...</string> <string name="decrypt_content_edit_text_hint">Saisir le cryptogramme à déchiffrer et/ou à vérifier ici...</string>
<!--certs--> <!--certs-->
<string name="cert_default">valeur par défaut</string> <string name="cert_default">valeur par défaut</string>

Some files were not shown because too many files have changed in this diff Show More