Merge branch 'master' of github.com:open-keychain/open-keychain
This commit is contained in:
@@ -91,6 +91,10 @@ public class TestHelpers {
|
||||
|
||||
}
|
||||
|
||||
public static void checkAndDismissSnackbar(Style style, @StringRes Integer text) {
|
||||
checkSnackbar(style, text);
|
||||
dismissSnackbar();
|
||||
}
|
||||
|
||||
public static void importKeysFromResource(Context context, String name) throws Exception {
|
||||
IteratorWithIOThrow<UncachedKeyRing> stream = UncachedKeyRing.fromStream(
|
||||
|
||||
@@ -184,7 +184,7 @@ public class AsymmetricFileOperationTests {
|
||||
handleSaveDecryptedFileIntent(savedFile, file.getName());
|
||||
|
||||
// save decrypted content
|
||||
onView(withText(R.string.btn_save)).perform(click());
|
||||
onView(withText(R.string.btn_save_file)).perform(click());
|
||||
|
||||
checkSnackbar(Style.OK, R.string.file_saved);
|
||||
assertThat("decrypted file has been saved", true, is(savedFile.exists()));
|
||||
|
||||
@@ -32,15 +32,14 @@ import org.junit.runner.RunWith;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
|
||||
import org.sufficientlysecure.keychain.util.FileHelper;
|
||||
|
||||
import static android.support.test.espresso.Espresso.onData;
|
||||
import static android.support.test.espresso.Espresso.onView;
|
||||
import static android.support.test.espresso.Espresso.pressBack;
|
||||
import static android.support.test.espresso.action.ViewActions.click;
|
||||
import static android.support.test.espresso.action.ViewActions.typeText;
|
||||
import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
|
||||
import static android.support.test.espresso.assertion.ViewAssertions.matches;
|
||||
import static android.support.test.espresso.contrib.DrawerActions.openDrawer;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
|
||||
@@ -115,33 +114,13 @@ public class AsymmetricTextOperationTests {
|
||||
onView(withId(R.id.passphrase_passphrase)).perform(typeText("x"));
|
||||
onView(withText(R.string.btn_unlock)).perform(click());
|
||||
|
||||
|
||||
onView(isRecyclerItemView(R.id.decrypted_files_list,
|
||||
hasDescendant(withText(R.string.filename_unknown_text))))
|
||||
.check(matches(allOf(withEncryptionStatus(true), withSignatureNone())));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTextEncryptDecryptFromKeyView() throws Exception {
|
||||
|
||||
String cleartext = randomString(10, 30);
|
||||
|
||||
pressBack();
|
||||
|
||||
{ // encrypt
|
||||
|
||||
// navigate to edit key dialog
|
||||
onData(withKeyItemId(0x9D604D2F310716A3L))
|
||||
.inAdapterView(allOf(isAssignableFrom(AdapterView.class),
|
||||
isDescendantOfA(withId(R.id.key_list_list))))
|
||||
.perform(click());
|
||||
onView(withId(R.id.view_key_action_encrypt_text)).perform(click());
|
||||
|
||||
// make sure the encrypt is correctly set
|
||||
onView(withId(R.id.result_encryption_icon)).check(matches(withDisplayedChild(1)));
|
||||
.check(matches(allOf(
|
||||
hasDescendant(withText(FileHelper.readableFileSize(cleartext.length()))),
|
||||
withEncryptionStatus(true),
|
||||
withSignatureNone()
|
||||
)));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,9 @@ import java.io.File;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.app.Instrumentation.ActivityResult;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
@@ -143,6 +146,18 @@ public class MiscCryptOperationTests {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecryptEmptyClipboard() throws Exception {
|
||||
|
||||
// decrypt any non-pgp file
|
||||
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
clipboard.setPrimaryClip(ClipData.newPlainText("", ""));
|
||||
|
||||
onView(withId(R.id.decrypt_from_clipboard)).perform(click());
|
||||
checkSnackbar(Style.ERROR, R.string.error_clipboard_empty);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecryptNonPgpClipboard() throws Exception {
|
||||
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Vincent Breitmoser <look@my.amazin.horse>
|
||||
*
|
||||
* 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;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Instrumentation.ActivityResult;
|
||||
import android.content.Intent;
|
||||
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.test.suitebuilder.annotation.LargeTest;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.MethodSorters;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
||||
import org.sufficientlysecure.keychain.provider.TemporaryStorageProvider;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
|
||||
|
||||
import static android.support.test.espresso.Espresso.onView;
|
||||
import static android.support.test.espresso.action.ViewActions.click;
|
||||
import static android.support.test.espresso.intent.Intents.intending;
|
||||
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasAction;
|
||||
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtra;
|
||||
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasType;
|
||||
import static android.support.test.espresso.intent.matcher.UriMatchers.hasHost;
|
||||
import static android.support.test.espresso.intent.matcher.UriMatchers.hasScheme;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.assertThat;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static org.hamcrest.CoreMatchers.allOf;
|
||||
import static org.hamcrest.CoreMatchers.startsWith;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.sufficientlysecure.keychain.TestHelpers.checkAndDismissSnackbar;
|
||||
import static org.sufficientlysecure.keychain.TestHelpers.cleanupForTests;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LargeTest
|
||||
public class ViewKeyAdvShareTest {
|
||||
|
||||
@Rule
|
||||
public final IntentsTestRule<ViewKeyAdvActivity> mActivityRule
|
||||
= new IntentsTestRule<ViewKeyAdvActivity>(ViewKeyAdvActivity.class) {
|
||||
@Override
|
||||
protected Intent getActivityIntent() {
|
||||
Intent intent = super.getActivityIntent();
|
||||
intent.setData(KeyRings.buildGenericKeyRingUri(0x9D604D2F310716A3L));
|
||||
intent.putExtra(ViewKeyAdvActivity.EXTRA_SELECTED_TAB, ViewKeyAdvActivity.TAB_SHARE);
|
||||
return intent;
|
||||
}
|
||||
};
|
||||
private Activity mActivity;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mActivity = mActivityRule.getActivity();
|
||||
|
||||
cleanupForTests(mActivity);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShareOperations() throws Exception {
|
||||
|
||||
// no-op should yield snackbar
|
||||
onView(withId(R.id.view_key_action_fingerprint_clipboard)).perform(click());
|
||||
checkAndDismissSnackbar(Style.OK, R.string.fingerprint_copied_to_clipboard);
|
||||
assertThat("clipboard data is fingerprint", ClipboardReflection.getClipboardText(mActivity),
|
||||
is("c619d53f7a5f96f391a84ca79d604d2f310716a3"));
|
||||
|
||||
intending(allOf(
|
||||
hasAction("android.intent.action.CHOOSER"),
|
||||
hasExtra(equalTo(Intent.EXTRA_INTENT), allOf(
|
||||
hasAction(Intent.ACTION_SEND),
|
||||
hasType("text/plain"),
|
||||
hasExtra(is(Intent.EXTRA_TEXT), is("openpgp4fpr:c619d53f7a5f96f391a84ca79d604d2f310716a3")),
|
||||
hasExtra(is(Intent.EXTRA_STREAM),
|
||||
allOf(hasScheme("content"), hasHost(TemporaryStorageProvider.CONTENT_AUTHORITY)))
|
||||
))
|
||||
)).respondWith(new ActivityResult(Activity.RESULT_OK, null));
|
||||
onView(withId(R.id.view_key_action_fingerprint_share)).perform(click());
|
||||
|
||||
onView(withId(R.id.view_key_action_key_clipboard)).perform(click());
|
||||
checkAndDismissSnackbar(Style.OK, R.string.key_copied_to_clipboard);
|
||||
assertThat("clipboard data is key",
|
||||
ClipboardReflection.getClipboardText(mActivity), startsWith("----"));
|
||||
|
||||
intending(allOf(
|
||||
hasAction("android.intent.action.CHOOSER"),
|
||||
hasExtra(equalTo(Intent.EXTRA_INTENT), allOf(
|
||||
hasAction(Intent.ACTION_SEND),
|
||||
hasType("text/plain"),
|
||||
hasExtra(is(Intent.EXTRA_TEXT), startsWith("----")),
|
||||
hasExtra(is(Intent.EXTRA_STREAM),
|
||||
allOf(hasScheme("content"), hasHost(TemporaryStorageProvider.CONTENT_AUTHORITY)))
|
||||
))
|
||||
)).respondWith(new ActivityResult(Activity.RESULT_OK, null));
|
||||
onView(withId(R.id.view_key_action_key_share)).perform(click());
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -48,9 +48,10 @@
|
||||
android:name="android.hardware.screen.portrait"
|
||||
android:required="false" />
|
||||
|
||||
<permission android:name="${applicationId}.WRITE_TEMPORARY_STORAGE" />
|
||||
|
||||
<uses-permission android:name="${applicationId}.WRITE_TEMPORARY_STORAGE" />
|
||||
<!-- TemporaryStorageProvider should be writable by OpenKeychain only, thus signature-level permission -->
|
||||
<permission
|
||||
android:name="${applicationId}.WRITE_TEMPORARY_STORAGE"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
@@ -94,6 +95,15 @@
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.MainActivity" />
|
||||
<!-- Connect with YubiKeys. This Activity will automatically show/import/create YubiKeys -->
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<data
|
||||
android:scheme="https"
|
||||
android:host="my.yubico.com"
|
||||
android:pathPrefix="/neo"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.EditKeyActivity"
|
||||
@@ -686,17 +696,6 @@
|
||||
android:launchMode="singleTop"
|
||||
android:taskAffinity=":Nfc" />
|
||||
|
||||
<!--<activity-->
|
||||
<!--android:name=".ui.NfcIntentActivity"-->
|
||||
<!--android:launchMode="singleTop">-->
|
||||
<!--<intent-filter>-->
|
||||
<!--<action android:name="android.nfc.action.NDEF_DISCOVERED" />-->
|
||||
|
||||
<!--<category android:name="android.intent.category.DEFAULT" />-->
|
||||
<!--<data android:host="my.yubico.com" android:scheme="https"/>-->
|
||||
<!--</intent-filter>-->
|
||||
<!--</activity>-->
|
||||
|
||||
<activity
|
||||
android:name=".ui.HelpActivity"
|
||||
android:label="@string/title_help" />
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.provider.ContactsContract;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.spongycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainDatabase;
|
||||
import org.sufficientlysecure.keychain.provider.TemporaryStorageProvider;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.ui.ConsolidateDialogActivity;
|
||||
@@ -101,7 +102,10 @@ public class KeychainApplication extends Application {
|
||||
|
||||
TemporaryStorageProvider.cleanUp(this);
|
||||
|
||||
checkConsolidateRecovery();
|
||||
if (!checkConsolidateRecovery()) {
|
||||
// force DB upgrade, https://github.com/open-keychain/open-keychain/issues/1334
|
||||
new KeychainDatabase(this).getReadableDatabase().close();
|
||||
}
|
||||
}
|
||||
|
||||
public static HashMap<String,Bitmap> qrCodeCache = new HashMap<>();
|
||||
@@ -118,12 +122,15 @@ public class KeychainApplication extends Application {
|
||||
/**
|
||||
* Restart consolidate process if it has been interruped before
|
||||
*/
|
||||
public void checkConsolidateRecovery() {
|
||||
public boolean checkConsolidateRecovery() {
|
||||
if (Preferences.getPreferences(this).getCachedConsolidate()) {
|
||||
Intent consolidateIntent = new Intent(this, ConsolidateDialogActivity.class);
|
||||
consolidateIntent.putExtra(ConsolidateDialogActivity.EXTRA_CONSOLIDATE_RECOVERY, true);
|
||||
consolidateIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(consolidateIntent);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2014 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.sufficientlysecure.keychain.compatibility;
|
||||
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.support.annotation.LayoutRes;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
/**
|
||||
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
|
||||
* to be used with AppCompat.
|
||||
* <p/>
|
||||
* This technique can be used with an {@link android.app.Activity} class, not just
|
||||
* {@link android.preference.PreferenceActivity}.
|
||||
*/
|
||||
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
|
||||
private AppCompatDelegate mDelegate;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
getDelegate().installViewFactory();
|
||||
getDelegate().onCreate(savedInstanceState);
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
getDelegate().onPostCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
public ActionBar getSupportActionBar() {
|
||||
return getDelegate().getSupportActionBar();
|
||||
}
|
||||
|
||||
public void setSupportActionBar(@Nullable Toolbar toolbar) {
|
||||
getDelegate().setSupportActionBar(toolbar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MenuInflater getMenuInflater() {
|
||||
return getDelegate().getMenuInflater();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentView(@LayoutRes int layoutResID) {
|
||||
getDelegate().setContentView(layoutResID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentView(View view) {
|
||||
getDelegate().setContentView(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentView(View view, ViewGroup.LayoutParams params) {
|
||||
getDelegate().setContentView(view, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addContentView(View view, ViewGroup.LayoutParams params) {
|
||||
getDelegate().addContentView(view, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostResume() {
|
||||
super.onPostResume();
|
||||
getDelegate().onPostResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTitleChanged(CharSequence title, int color) {
|
||||
super.onTitleChanged(title, color);
|
||||
getDelegate().setTitle(title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
getDelegate().onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
getDelegate().onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
getDelegate().onDestroy();
|
||||
}
|
||||
|
||||
public void invalidateOptionsMenu() {
|
||||
getDelegate().invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
private AppCompatDelegate getDelegate() {
|
||||
if (mDelegate == null) {
|
||||
mDelegate = AppCompatDelegate.create(this, null);
|
||||
}
|
||||
return mDelegate;
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public class ClipboardReflection {
|
||||
|
||||
}
|
||||
|
||||
public static CharSequence getClipboardText(Context context) {
|
||||
public static String getClipboardText(Context context) {
|
||||
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
|
||||
ClipData clip = clipboard.getPrimaryClip();
|
||||
@@ -48,6 +48,10 @@ public class ClipboardReflection {
|
||||
}
|
||||
|
||||
ClipData.Item item = clip.getItemAt(0);
|
||||
return item.coerceToText(context);
|
||||
CharSequence seq = item.coerceToText(context);
|
||||
if (seq != null) {
|
||||
return seq.toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,6 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URLConnection;
|
||||
import java.security.SignatureException;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
@@ -676,8 +675,6 @@ public class PgpDecryptVerify extends BaseOperation<PgpDecryptVerifyInputParcel>
|
||||
|| 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) {
|
||||
@@ -685,10 +682,7 @@ public class PgpDecryptVerify extends BaseOperation<PgpDecryptVerifyInputParcel>
|
||||
mimeType = mime.getMimeTypeFromExtension(extension);
|
||||
}
|
||||
if (mimeType == null) {
|
||||
mimeType = URLConnection.guessContentTypeFromName(originalFilename);
|
||||
}
|
||||
if (mimeType == null) {
|
||||
mimeType = "*/*";
|
||||
mimeType = "application/octet-stream";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -944,7 +938,14 @@ public class PgpDecryptVerify extends BaseOperation<PgpDecryptVerifyInputParcel>
|
||||
|
||||
log.add(LogType.MSG_DC_OK, indent);
|
||||
|
||||
OpenPgpMetadata metadata = new OpenPgpMetadata(
|
||||
"",
|
||||
"text/plain",
|
||||
-1,
|
||||
clearText.length);
|
||||
|
||||
DecryptVerifyResult result = new DecryptVerifyResult(DecryptVerifyResult.RESULT_OK, log);
|
||||
result.setDecryptMetadata(metadata);
|
||||
result.setSignatureResult(signatureResultBuilder.build());
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -520,7 +520,6 @@ public class KeychainProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case KEY_RINGS_PUBLIC:
|
||||
@@ -607,23 +606,26 @@ public class KeychainProvider extends ContentProvider {
|
||||
break;
|
||||
}
|
||||
|
||||
case API_APPS:
|
||||
case API_APPS: {
|
||||
qb.setTables(Tables.API_APPS);
|
||||
|
||||
break;
|
||||
case API_APPS_BY_PACKAGE_NAME:
|
||||
}
|
||||
case API_APPS_BY_PACKAGE_NAME: {
|
||||
qb.setTables(Tables.API_APPS);
|
||||
qb.appendWhere(ApiApps.PACKAGE_NAME + " = ");
|
||||
qb.appendWhereEscapeString(uri.getLastPathSegment());
|
||||
|
||||
break;
|
||||
case API_ACCOUNTS:
|
||||
}
|
||||
case API_ACCOUNTS: {
|
||||
qb.setTables(Tables.API_ACCOUNTS);
|
||||
qb.appendWhere(Tables.API_ACCOUNTS + "." + ApiAccounts.PACKAGE_NAME + " = ");
|
||||
qb.appendWhereEscapeString(uri.getPathSegments().get(1));
|
||||
|
||||
break;
|
||||
case API_ACCOUNTS_BY_ACCOUNT_NAME:
|
||||
}
|
||||
case API_ACCOUNTS_BY_ACCOUNT_NAME: {
|
||||
qb.setTables(Tables.API_ACCOUNTS);
|
||||
qb.appendWhere(Tables.API_ACCOUNTS + "." + ApiAccounts.PACKAGE_NAME + " = ");
|
||||
qb.appendWhereEscapeString(uri.getPathSegments().get(1));
|
||||
@@ -632,14 +634,17 @@ public class KeychainProvider extends ContentProvider {
|
||||
qb.appendWhereEscapeString(uri.getLastPathSegment());
|
||||
|
||||
break;
|
||||
case API_ALLOWED_KEYS:
|
||||
}
|
||||
case API_ALLOWED_KEYS: {
|
||||
qb.setTables(Tables.API_ALLOWED_KEYS);
|
||||
qb.appendWhere(Tables.API_ALLOWED_KEYS + "." + ApiAccounts.PACKAGE_NAME + " = ");
|
||||
qb.appendWhereEscapeString(uri.getPathSegments().get(1));
|
||||
|
||||
break;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
throw new IllegalArgumentException("Unknown URI " + uri + " (" + match + ")");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -684,47 +689,47 @@ public class KeychainProvider extends ContentProvider {
|
||||
final int match = mUriMatcher.match(uri);
|
||||
|
||||
switch (match) {
|
||||
case KEY_RING_PUBLIC:
|
||||
case KEY_RING_PUBLIC: {
|
||||
db.insertOrThrow(Tables.KEY_RINGS_PUBLIC, null, values);
|
||||
keyId = values.getAsLong(KeyRings.MASTER_KEY_ID);
|
||||
break;
|
||||
|
||||
case KEY_RING_SECRET:
|
||||
}
|
||||
case KEY_RING_SECRET: {
|
||||
db.insertOrThrow(Tables.KEY_RINGS_SECRET, null, values);
|
||||
keyId = values.getAsLong(KeyRings.MASTER_KEY_ID);
|
||||
break;
|
||||
|
||||
case KEY_RING_KEYS:
|
||||
}
|
||||
case KEY_RING_KEYS: {
|
||||
db.insertOrThrow(Tables.KEYS, null, values);
|
||||
keyId = values.getAsLong(Keys.MASTER_KEY_ID);
|
||||
break;
|
||||
|
||||
case KEY_RING_USER_IDS:
|
||||
}
|
||||
case KEY_RING_USER_IDS: {
|
||||
// iff TYPE is null, user_id MUST be null as well
|
||||
if ( ! (values.get(UserPacketsColumns.TYPE) == null
|
||||
if (!(values.get(UserPacketsColumns.TYPE) == null
|
||||
? (values.get(UserPacketsColumns.USER_ID) != null && values.get(UserPacketsColumns.ATTRIBUTE_DATA) == null)
|
||||
: (values.get(UserPacketsColumns.ATTRIBUTE_DATA) != null && values.get(UserPacketsColumns.USER_ID) == null)
|
||||
)) {
|
||||
)) {
|
||||
throw new AssertionError("Incorrect type for user packet! This is a bug!");
|
||||
}
|
||||
if (((Number)values.get(UserPacketsColumns.RANK)).intValue() == 0 && values.get(UserPacketsColumns.USER_ID) == null) {
|
||||
if (((Number) values.get(UserPacketsColumns.RANK)).intValue() == 0 && values.get(UserPacketsColumns.USER_ID) == null) {
|
||||
throw new AssertionError("Rank 0 user packet must be a user id!");
|
||||
}
|
||||
db.insertOrThrow(Tables.USER_PACKETS, null, values);
|
||||
keyId = values.getAsLong(UserPackets.MASTER_KEY_ID);
|
||||
break;
|
||||
|
||||
case KEY_RING_CERTS:
|
||||
}
|
||||
case KEY_RING_CERTS: {
|
||||
// we replace here, keeping only the latest signature
|
||||
// TODO this would be better handled in savePublicKeyRing directly!
|
||||
db.replaceOrThrow(Tables.CERTS, null, values);
|
||||
keyId = values.getAsLong(Certs.MASTER_KEY_ID);
|
||||
break;
|
||||
|
||||
case API_APPS:
|
||||
}
|
||||
case API_APPS: {
|
||||
db.insertOrThrow(Tables.API_APPS, null, values);
|
||||
break;
|
||||
|
||||
}
|
||||
case API_ACCOUNTS: {
|
||||
// set foreign key automatically based on given uri
|
||||
// e.g., api_apps/com.example.app/accounts/
|
||||
@@ -743,8 +748,9 @@ public class KeychainProvider extends ContentProvider {
|
||||
db.insertOrThrow(Tables.API_ALLOWED_KEYS, null, values);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
default: {
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
if (keyId != null) {
|
||||
@@ -802,20 +808,24 @@ public class KeychainProvider extends ContentProvider {
|
||||
break;
|
||||
}
|
||||
|
||||
case API_APPS_BY_PACKAGE_NAME:
|
||||
case API_APPS_BY_PACKAGE_NAME: {
|
||||
count = db.delete(Tables.API_APPS, buildDefaultApiAppsSelection(uri, additionalSelection),
|
||||
selectionArgs);
|
||||
break;
|
||||
case API_ACCOUNTS_BY_ACCOUNT_NAME:
|
||||
}
|
||||
case API_ACCOUNTS_BY_ACCOUNT_NAME: {
|
||||
count = db.delete(Tables.API_ACCOUNTS, buildDefaultApiAccountsSelection(uri, additionalSelection),
|
||||
selectionArgs);
|
||||
break;
|
||||
case API_ALLOWED_KEYS:
|
||||
}
|
||||
case API_ALLOWED_KEYS: {
|
||||
count = db.delete(Tables.API_ALLOWED_KEYS, buildDefaultApiAllowedKeysSelection(uri, additionalSelection),
|
||||
selectionArgs);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
// notify of changes in db
|
||||
@@ -851,16 +861,19 @@ public class KeychainProvider extends ContentProvider {
|
||||
count = db.update(Tables.KEYS, values, actualSelection, selectionArgs);
|
||||
break;
|
||||
}
|
||||
case API_APPS_BY_PACKAGE_NAME:
|
||||
case API_APPS_BY_PACKAGE_NAME: {
|
||||
count = db.update(Tables.API_APPS, values,
|
||||
buildDefaultApiAppsSelection(uri, selection), selectionArgs);
|
||||
break;
|
||||
case API_ACCOUNTS_BY_ACCOUNT_NAME:
|
||||
}
|
||||
case API_ACCOUNTS_BY_ACCOUNT_NAME: {
|
||||
count = db.update(Tables.API_ACCOUNTS, values,
|
||||
buildDefaultApiAccountsSelection(uri, selection), selectionArgs);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
// notify of changes in db
|
||||
|
||||
@@ -19,23 +19,15 @@
|
||||
package org.sufficientlysecure.keychain.provider;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.UUID;
|
||||
|
||||
import android.content.ClipDescription;
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.res.AssetFileDescriptor;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.CancellationSignal;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.provider.OpenableColumns;
|
||||
|
||||
@@ -43,6 +35,30 @@ import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.util.DatabaseUtil;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* TemporaryStorageProvider stores decrypted files inside the app's cache directory previously to
|
||||
* sharing them with other applications.
|
||||
*
|
||||
* Security:
|
||||
* - It is writable by OpenKeychain only (see Manifest), but exported for reading files
|
||||
* - It uses UUIDs as identifiers which makes predicting files from outside impossible
|
||||
* - Querying a number of files is not allowed, only querying single files
|
||||
* -> You can only open a file if you know the Uri containing the precise UUID, this Uri is only
|
||||
* revealed when the user shares a decrypted file with another app.
|
||||
*
|
||||
* Why is support lib's FileProvider not used?
|
||||
* Because granting Uri permissions temporarily does not work correctly. See
|
||||
* - https://code.google.com/p/android/issues/detail?id=76683
|
||||
* - https://github.com/nmr8acme/FileProvider-permission-bug
|
||||
* - http://stackoverflow.com/q/24467696
|
||||
* - http://stackoverflow.com/q/18249007
|
||||
* - Comments at http://www.blogc.at/2014/03/23/share-private-files-with-other-apps-fileprovider/
|
||||
*/
|
||||
public class TemporaryStorageProvider extends ContentProvider {
|
||||
|
||||
private static final String DB_NAME = "tempstorage.db";
|
||||
@@ -143,6 +159,10 @@ public class TemporaryStorageProvider extends ContentProvider {
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
|
||||
if (uri.getLastPathSegment() == null) {
|
||||
throw new SecurityException("Listing temporary files is not allowed, only querying single files.");
|
||||
}
|
||||
|
||||
File file;
|
||||
try {
|
||||
file = getFile(uri);
|
||||
@@ -153,9 +173,15 @@ public class TemporaryStorageProvider extends ContentProvider {
|
||||
new String[]{uri.getLastPathSegment()}, null, null, null);
|
||||
if (fileName != null) {
|
||||
if (fileName.moveToNext()) {
|
||||
MatrixCursor cursor =
|
||||
new MatrixCursor(new String[]{OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE, "_data"});
|
||||
cursor.newRow().add(fileName.getString(0)).add(file.length()).add(file.getAbsolutePath());
|
||||
MatrixCursor cursor = new MatrixCursor(new String[]{
|
||||
OpenableColumns.DISPLAY_NAME,
|
||||
OpenableColumns.SIZE,
|
||||
"_data"
|
||||
});
|
||||
cursor.newRow()
|
||||
.add(fileName.getString(0))
|
||||
.add(file.length())
|
||||
.add(file.getAbsolutePath());
|
||||
fileName.close();
|
||||
return cursor;
|
||||
}
|
||||
@@ -167,8 +193,8 @@ public class TemporaryStorageProvider extends ContentProvider {
|
||||
@Override
|
||||
public String getType(Uri uri) {
|
||||
Cursor cursor = db.getReadableDatabase().query(TABLE_FILES,
|
||||
new String[]{ COLUMN_TYPE }, COLUMN_ID + "=?",
|
||||
new String[]{ uri.getLastPathSegment() }, null, null, null);
|
||||
new String[]{COLUMN_TYPE}, COLUMN_ID + "=?",
|
||||
new String[]{uri.getLastPathSegment()}, null, null, null);
|
||||
if (cursor != null) {
|
||||
try {
|
||||
if (cursor.moveToNext()) {
|
||||
@@ -180,14 +206,14 @@ public class TemporaryStorageProvider extends ContentProvider {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
return "*/*";
|
||||
return "application/octet-stream";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getStreamTypes(Uri uri, String mimeTypeFilter) {
|
||||
String type = getType(uri);
|
||||
if (ClipDescription.compareMimeTypes(type, mimeTypeFilter)) {
|
||||
return new String[] { type };
|
||||
return new String[]{type};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -200,9 +226,14 @@ public class TemporaryStorageProvider extends ContentProvider {
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
values.put(COLUMN_ID, uuid);
|
||||
int insert = (int) db.getWritableDatabase().insert(TABLE_FILES, null, values);
|
||||
if (insert == -1) {
|
||||
Log.e(Constants.TAG, "Insert failed!");
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
getFile(uuid).createNewFile();
|
||||
} catch (IOException e) {
|
||||
Log.e(Constants.TAG, "File creation failed!");
|
||||
return null;
|
||||
}
|
||||
return Uri.withAppendedPath(BASE_URI, uuid);
|
||||
@@ -238,7 +269,7 @@ public class TemporaryStorageProvider extends ContentProvider {
|
||||
throw new UnsupportedOperationException("Update supported only for plain uri!");
|
||||
}
|
||||
return db.getWritableDatabase().update(TABLE_FILES, values,
|
||||
COLUMN_ID + " = ?", new String[]{ uri.getLastPathSegment() });
|
||||
COLUMN_ID + " = ?", new String[]{uri.getLastPathSegment()});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -167,7 +167,7 @@ public class OpenPgpService extends RemoteService {
|
||||
Intent data, RequiredInputParcel requiredInput) {
|
||||
|
||||
switch (requiredInput.mType) {
|
||||
case NFC_KEYTOCARD:
|
||||
case NFC_MOVE_KEY_TO_CARD:
|
||||
case NFC_DECRYPT:
|
||||
case NFC_SIGN: {
|
||||
// build PendingIntent for YubiKey NFC operations
|
||||
|
||||
@@ -459,11 +459,16 @@ public class PassphraseCacheService extends Service {
|
||||
* Called when one specific passphrase for keyId timed out
|
||||
*/
|
||||
private void timeout(long keyId) {
|
||||
|
||||
CachedPassphrase cPass = mPassphraseCache.get(keyId);
|
||||
// clean internal char[] from memory!
|
||||
cPass.getPassphrase().removeFromMemory();
|
||||
// remove passphrase object
|
||||
mPassphraseCache.remove(keyId);
|
||||
if (cPass != null) {
|
||||
if (cPass.getPassphrase() != null) {
|
||||
// clean internal char[] from memory!
|
||||
cPass.getPassphrase().removeFromMemory();
|
||||
}
|
||||
// remove passphrase object
|
||||
mPassphraseCache.remove(keyId);
|
||||
}
|
||||
|
||||
Log.d(Constants.TAG, "PassphraseCacheService Timeout of keyId " + keyId + ", removed from memory!");
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import android.os.Parcelable;
|
||||
public class RequiredInputParcel implements Parcelable {
|
||||
|
||||
public enum RequiredInputType {
|
||||
PASSPHRASE, PASSPHRASE_SYMMETRIC, NFC_SIGN, NFC_DECRYPT, NFC_KEYTOCARD
|
||||
PASSPHRASE, PASSPHRASE_SYMMETRIC, NFC_SIGN, NFC_DECRYPT, NFC_MOVE_KEY_TO_CARD
|
||||
}
|
||||
|
||||
public Date mSignatureTime;
|
||||
@@ -226,7 +226,7 @@ public class RequiredInputParcel implements Parcelable {
|
||||
ByteBuffer buf = ByteBuffer.wrap(mSubkeysToExport.get(0));
|
||||
|
||||
// We need to pass in a subkey here...
|
||||
return new RequiredInputParcel(RequiredInputType.NFC_KEYTOCARD,
|
||||
return new RequiredInputParcel(RequiredInputType.NFC_MOVE_KEY_TO_CARD,
|
||||
inputHashes, null, null, mMasterKeyId, buf.getLong());
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ public class RequiredInputParcel implements Parcelable {
|
||||
if (!mMasterKeyId.equals(input.mMasterKeyId)) {
|
||||
throw new AssertionError("Master keys must match, this is a programming error!");
|
||||
}
|
||||
if (input.mType != RequiredInputType.NFC_KEYTOCARD) {
|
||||
if (input.mType != RequiredInputType.NFC_MOVE_KEY_TO_CARD) {
|
||||
throw new AssertionError("Operation types must match, this is a programming error!");
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,8 @@
|
||||
|
||||
package org.sufficientlysecure.keychain.ui;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
@@ -64,6 +63,23 @@ public class CreateKeyActivity extends BaseNfcActivity {
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// React on NDEF_DISCOVERED from Manifest
|
||||
// NOTE: ACTION_NDEF_DISCOVERED and not ACTION_TAG_DISCOVERED like in BaseNfcActivity
|
||||
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
|
||||
try {
|
||||
handleTagDiscoveredIntent(getIntent());
|
||||
} catch (CardException e) {
|
||||
handleNfcError(e);
|
||||
} catch (IOException e) {
|
||||
handleNfcError(e);
|
||||
}
|
||||
|
||||
setTitle(R.string.title_manage_my_keys);
|
||||
|
||||
// done
|
||||
return;
|
||||
}
|
||||
|
||||
// Check whether we're recreating a previously destroyed instance
|
||||
if (savedInstanceState != null) {
|
||||
// Restore value of members from saved state
|
||||
@@ -89,17 +105,25 @@ public class CreateKeyActivity extends BaseNfcActivity {
|
||||
String nfcUserId = intent.getStringExtra(EXTRA_NFC_USER_ID);
|
||||
byte[] nfcAid = intent.getByteArrayExtra(EXTRA_NFC_AID);
|
||||
|
||||
Fragment frag2 = CreateKeyYubiKeyImportFragment.createInstance(
|
||||
nfcFingerprints, nfcAid, nfcUserId);
|
||||
loadFragment(frag2, FragAction.START);
|
||||
if (containsKeys(nfcFingerprints)) {
|
||||
Fragment frag = CreateKeyYubiKeyImportFragment.newInstance(
|
||||
nfcFingerprints, nfcAid, nfcUserId);
|
||||
loadFragment(frag, FragAction.START);
|
||||
|
||||
setTitle(R.string.title_import_keys);
|
||||
setTitle(R.string.title_import_keys);
|
||||
} else {
|
||||
Fragment frag = CreateKeyYubiKeyBlankFragment.newInstance();
|
||||
loadFragment(frag, FragAction.START);
|
||||
setTitle(R.string.title_manage_my_keys);
|
||||
}
|
||||
|
||||
// done
|
||||
return;
|
||||
} else {
|
||||
CreateKeyStartFragment frag = CreateKeyStartFragment.newInstance();
|
||||
loadFragment(frag, FragAction.START);
|
||||
}
|
||||
|
||||
// normal key creation
|
||||
CreateKeyStartFragment frag = CreateKeyStartFragment.newInstance();
|
||||
loadFragment(frag, FragAction.START);
|
||||
}
|
||||
|
||||
if (mFirstTime) {
|
||||
@@ -122,16 +146,7 @@ public class CreateKeyActivity extends BaseNfcActivity {
|
||||
byte[] nfcAid = nfcGetAid();
|
||||
String userId = nfcGetUserId();
|
||||
|
||||
// If all fingerprint bytes are 0, the card contains no keys.
|
||||
boolean cardContainsKeys = false;
|
||||
for (byte b : scannedFingerprints) {
|
||||
if (b != 0) {
|
||||
cardContainsKeys = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (cardContainsKeys) {
|
||||
if (containsKeys(scannedFingerprints)) {
|
||||
try {
|
||||
long masterKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(scannedFingerprints);
|
||||
CachedPublicKeyRing ring = new ProviderHelper(this).getCachedPublicKeyRing(masterKeyId);
|
||||
@@ -146,25 +161,29 @@ public class CreateKeyActivity extends BaseNfcActivity {
|
||||
finish();
|
||||
|
||||
} catch (PgpKeyNotFoundException e) {
|
||||
Fragment frag = CreateKeyYubiKeyImportFragment.createInstance(
|
||||
Fragment frag = CreateKeyYubiKeyImportFragment.newInstance(
|
||||
scannedFingerprints, nfcAid, userId);
|
||||
loadFragment(frag, FragAction.TO_RIGHT);
|
||||
}
|
||||
} else {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.first_time_blank_smartcard_title)
|
||||
.setMessage(R.string.first_time_blank_smartcard_message)
|
||||
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int button) {
|
||||
CreateKeyActivity.this.mUseSmartCardSettings = true;
|
||||
}
|
||||
})
|
||||
.setNegativeButton(android.R.string.no, null).show();
|
||||
Fragment frag = CreateKeyYubiKeyBlankFragment.newInstance();
|
||||
loadFragment(frag, FragAction.TO_RIGHT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private boolean containsKeys(byte[] scannedFingerprints) {
|
||||
// If all fingerprint bytes are 0, the card contains no keys.
|
||||
boolean cardContainsKeys = false;
|
||||
for (byte b : scannedFingerprints) {
|
||||
if (b != 0) {
|
||||
cardContainsKeys = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return cardContainsKeys;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
@@ -182,7 +201,7 @@ public class CreateKeyActivity extends BaseNfcActivity {
|
||||
setContentView(R.layout.create_key_activity);
|
||||
}
|
||||
|
||||
public static enum FragAction {
|
||||
public enum FragAction {
|
||||
START,
|
||||
TO_RIGHT,
|
||||
TO_LEFT
|
||||
|
||||
@@ -18,9 +18,13 @@
|
||||
package org.sufficientlysecure.keychain.ui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -28,25 +32,32 @@ import android.widget.CheckBox;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.spongycastle.bcpg.sig.KeyFlags;
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.operations.results.EditKeyResult;
|
||||
import org.sufficientlysecure.keychain.operations.results.ExportResult;
|
||||
import org.sufficientlysecure.keychain.operations.results.OperationResult;
|
||||
import org.sufficientlysecure.keychain.pgp.KeyRing;
|
||||
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
||||
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||
import org.sufficientlysecure.keychain.service.ExportKeyringParcel;
|
||||
import org.sufficientlysecure.keychain.service.KeychainService;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel;
|
||||
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
|
||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
|
||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationFragment;
|
||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
public class CreateKeyFinalFragment
|
||||
extends CryptoOperationFragment<SaveKeyringParcel, EditKeyResult> {
|
||||
public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringParcel, OperationResult> {
|
||||
|
||||
public static final int REQUEST_EDIT_KEY = 0x00008007;
|
||||
|
||||
@@ -61,6 +72,7 @@ public class CreateKeyFinalFragment
|
||||
SaveKeyringParcel mSaveKeyringParcel;
|
||||
|
||||
private CryptoOperationHelper<ExportKeyringParcel, ExportResult> mUploadOpHelper;
|
||||
private CryptoOperationHelper<SaveKeyringParcel, EditKeyResult> mCreateOpHelper;
|
||||
|
||||
public static CreateKeyFinalFragment newInstance() {
|
||||
CreateKeyFinalFragment frag = new CreateKeyFinalFragment();
|
||||
@@ -128,14 +140,16 @@ public class CreateKeyFinalFragment
|
||||
}
|
||||
});
|
||||
|
||||
// If this is a debug build, don't upload by default
|
||||
if (Constants.DEBUG) {
|
||||
mUploadCheckbox.setChecked(false);
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (mUploadOpHelper != null) {
|
||||
mUploadOpHelper.handleActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
switch (requestCode) {
|
||||
case REQUEST_EDIT_KEY: {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
@@ -150,30 +164,6 @@ public class CreateKeyFinalFragment
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SaveKeyringParcel createOperationInput() {
|
||||
return mSaveKeyringParcel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationSuccess(EditKeyResult result) {
|
||||
if (result.mMasterKeyId != null && mUploadCheckbox.isChecked()) {
|
||||
// result will be displayed after upload
|
||||
uploadKey(result);
|
||||
} else {
|
||||
Intent data = new Intent();
|
||||
data.putExtra(OperationResult.EXTRA_RESULT, result);
|
||||
getActivity().setResult(Activity.RESULT_OK, data);
|
||||
getActivity().finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCryptoOperationResult(EditKeyResult result) {
|
||||
// do something else?
|
||||
super.onCryptoOperationResult(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
@@ -190,6 +180,7 @@ public class CreateKeyFinalFragment
|
||||
mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
|
||||
2048, null, KeyFlags.AUTHENTICATION, 0L));
|
||||
mEditText.setText(R.string.create_key_custom);
|
||||
mEditButton.setEnabled(false);
|
||||
} else {
|
||||
mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
|
||||
4096, null, KeyFlags.CERTIFY_OTHER, 0L));
|
||||
@@ -218,15 +209,112 @@ public class CreateKeyFinalFragment
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void createKey() {
|
||||
super.setProgressMessageResource(R.string.progress_building_key);
|
||||
super.cryptoOperation();
|
||||
final CreateKeyActivity createKeyActivity = (CreateKeyActivity) getActivity();
|
||||
|
||||
CryptoOperationHelper.Callback<SaveKeyringParcel, EditKeyResult> createKeyCallback
|
||||
= new CryptoOperationHelper.Callback<SaveKeyringParcel, EditKeyResult>() {
|
||||
@Override
|
||||
public SaveKeyringParcel createOperationInput() {
|
||||
return mSaveKeyringParcel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationSuccess(EditKeyResult result) {
|
||||
|
||||
if (createKeyActivity.mUseSmartCardSettings) {
|
||||
// save key id in between
|
||||
mSaveKeyringParcel.mMasterKeyId = result.mMasterKeyId;
|
||||
// calls cryptoOperation corresponding to moveToCard
|
||||
cryptoOperation(new CryptoInputParcel());
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.mMasterKeyId != null && mUploadCheckbox.isChecked()) {
|
||||
// result will be displayed after upload
|
||||
uploadKey(result);
|
||||
return;
|
||||
}
|
||||
|
||||
Intent data = new Intent();
|
||||
data.putExtra(OperationResult.EXTRA_RESULT, result);
|
||||
getActivity().setResult(Activity.RESULT_OK, data);
|
||||
getActivity().finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationCancelled() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationError(EditKeyResult result) {
|
||||
result.createNotify(getActivity()).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCryptoSetProgress(String msg, int progress, int max) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
mCreateOpHelper = new CryptoOperationHelper<>(this, createKeyCallback,
|
||||
R.string.progress_building_key);
|
||||
|
||||
mCreateOpHelper.cryptoOperation();
|
||||
}
|
||||
|
||||
// currently only used for moveToCard
|
||||
@Override
|
||||
public SaveKeyringParcel createOperationInput() {
|
||||
CachedPublicKeyRing key = (new ProviderHelper(getActivity()))
|
||||
.getCachedPublicKeyRing(mSaveKeyringParcel.mMasterKeyId);
|
||||
|
||||
// overwrite mSaveKeyringParcel!
|
||||
try {
|
||||
mSaveKeyringParcel = new SaveKeyringParcel(key.getMasterKeyId(), key.getFingerprint());
|
||||
} catch (PgpKeyNotFoundException e) {
|
||||
Log.e(Constants.TAG, "Key that should be moved to YubiKey not found in database!");
|
||||
return null;
|
||||
}
|
||||
|
||||
Cursor cursor = getActivity().getContentResolver().query(
|
||||
KeychainContract.Keys.buildKeysUri(mSaveKeyringParcel.mMasterKeyId),
|
||||
new String[]{KeychainContract.Keys.KEY_ID,}, null, null, null
|
||||
);
|
||||
try {
|
||||
while (cursor != null && cursor.moveToNext()) {
|
||||
long subkeyId = cursor.getLong(0);
|
||||
mSaveKeyringParcel.getOrCreateSubkeyChange(subkeyId).mMoveKeyToCard = true;
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
return mSaveKeyringParcel;
|
||||
}
|
||||
|
||||
// currently only used for moveToCard
|
||||
@Override
|
||||
public void onCryptoOperationSuccess(OperationResult result) {
|
||||
EditKeyResult editResult = (EditKeyResult) result;
|
||||
|
||||
if (editResult.mMasterKeyId != null && mUploadCheckbox.isChecked()) {
|
||||
// result will be displayed after upload
|
||||
uploadKey(editResult);
|
||||
return;
|
||||
}
|
||||
|
||||
Intent data = new Intent();
|
||||
data.putExtra(OperationResult.EXTRA_RESULT, result);
|
||||
getActivity().setResult(Activity.RESULT_OK, data);
|
||||
getActivity().finish();
|
||||
}
|
||||
|
||||
// TODO move into EditKeyOperation
|
||||
private void uploadKey(final EditKeyResult saveKeyResult) {
|
||||
|
||||
// set data uri as path to keyring
|
||||
final Uri blobUri = KeychainContract.KeyRings.buildUnifiedKeyRingUri(
|
||||
saveKeyResult.mMasterKeyId);
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
|
||||
|
||||
public class CreateKeyYubiKeyBlankFragment extends Fragment {
|
||||
|
||||
CreateKeyActivity mCreateKeyActivity;
|
||||
View mBackButton;
|
||||
View mNextButton;
|
||||
|
||||
/**
|
||||
* Creates new instance of this fragment
|
||||
*/
|
||||
public static CreateKeyYubiKeyBlankFragment newInstance() {
|
||||
CreateKeyYubiKeyBlankFragment frag = new CreateKeyYubiKeyBlankFragment();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
|
||||
frag.setArguments(args);
|
||||
|
||||
return frag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.create_yubi_key_blank_fragment, container, false);
|
||||
|
||||
mBackButton = view.findViewById(R.id.create_key_back_button);
|
||||
mNextButton = view.findViewById(R.id.create_key_next_button);
|
||||
|
||||
mBackButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (getFragmentManager().getBackStackEntryCount() == 0) {
|
||||
getActivity().setResult(Activity.RESULT_CANCELED);
|
||||
getActivity().finish();
|
||||
} else {
|
||||
mCreateKeyActivity.loadFragment(null, FragAction.TO_LEFT);
|
||||
}
|
||||
}
|
||||
});
|
||||
mNextButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
nextClicked();
|
||||
}
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
mCreateKeyActivity = (CreateKeyActivity) getActivity();
|
||||
}
|
||||
|
||||
private void nextClicked() {
|
||||
mCreateKeyActivity.mUseSmartCardSettings = true;
|
||||
|
||||
CreateKeyNameFragment frag = CreateKeyNameFragment.newInstance();
|
||||
mCreateKeyActivity.loadFragment(frag, FragAction.TO_RIGHT);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -66,7 +66,7 @@ public class CreateKeyYubiKeyImportFragment
|
||||
private String mKeyserver;
|
||||
private ArrayList<ParcelableKeyRing> mKeyList;
|
||||
|
||||
public static Fragment createInstance(byte[] scannedFingerprints, byte[] nfcAid, String userId) {
|
||||
public static Fragment newInstance(byte[] scannedFingerprints, byte[] nfcAid, String userId) {
|
||||
|
||||
CreateKeyYubiKeyImportFragment frag = new CreateKeyYubiKeyImportFragment();
|
||||
|
||||
@@ -97,7 +97,7 @@ public class CreateKeyYubiKeyImportFragment
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.create_yubikey_import_fragment, container, false);
|
||||
View view = inflater.inflate(R.layout.create_yubi_key_import_fragment, container, false);
|
||||
|
||||
vSerNo = (TextView) view.findViewById(R.id.yubikey_serno);
|
||||
vUserId = (TextView) view.findViewById(R.id.yubikey_userid);
|
||||
|
||||
@@ -35,7 +35,7 @@ public class CreateKeyYubiKeyWaitFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.create_yubikey_wait_fragment, container, false);
|
||||
View view = inflater.inflate(R.layout.create_yubi_key_wait_fragment, container, false);
|
||||
|
||||
mBackButton = view.findViewById(R.id.create_key_back_button);
|
||||
|
||||
|
||||
@@ -120,7 +120,14 @@ public class DecryptActivity extends BaseActivity {
|
||||
|
||||
case ACTION_DECRYPT_FROM_CLIPBOARD: {
|
||||
ClipboardManager clipMan = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
if (clipMan == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
ClipData clip = clipMan.getPrimaryClip();
|
||||
if (clip == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
// check if data is available as uri
|
||||
Uri uri = null;
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -37,6 +38,7 @@ import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
|
||||
import org.sufficientlysecure.keychain.pgp.PgpHelper;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
|
||||
import org.sufficientlysecure.keychain.ui.util.SubtleAttentionSeeker;
|
||||
import org.sufficientlysecure.keychain.util.FileHelper;
|
||||
|
||||
@@ -92,15 +94,31 @@ public class EncryptDecryptOverviewFragment extends Fragment {
|
||||
mDecryptFromClipboard.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent clipboardDecrypt = new Intent(getActivity(), DecryptActivity.class);
|
||||
clipboardDecrypt.setAction(DecryptActivity.ACTION_DECRYPT_FROM_CLIPBOARD);
|
||||
startActivityForResult(clipboardDecrypt, 0);
|
||||
decryptFromClipboard();
|
||||
}
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
private void decryptFromClipboard() {
|
||||
|
||||
Activity activity = getActivity();
|
||||
if (activity == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final CharSequence clipboardText = ClipboardReflection.getClipboardText(activity);
|
||||
if (clipboardText == null || TextUtils.isEmpty(clipboardText)) {
|
||||
Notify.create(activity, R.string.error_clipboard_empty, Style.ERROR).show();
|
||||
return;
|
||||
}
|
||||
|
||||
Intent clipboardDecrypt = new Intent(getActivity(), DecryptActivity.class);
|
||||
clipboardDecrypt.setAction(DecryptActivity.ACTION_DECRYPT_FROM_CLIPBOARD);
|
||||
startActivityForResult(clipboardDecrypt, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
@@ -63,7 +63,7 @@ public class NfcOperationActivity extends BaseNfcActivity {
|
||||
mServiceIntent = data.getParcelable(EXTRA_SERVICE_INTENT);
|
||||
|
||||
// obtain passphrase for this subkey
|
||||
if (mRequiredInput.mType != RequiredInputParcel.RequiredInputType.NFC_KEYTOCARD) {
|
||||
if (mRequiredInput.mType != RequiredInputParcel.RequiredInputType.NFC_MOVE_KEY_TO_CARD) {
|
||||
obtainYubiKeyPin(mRequiredInput);
|
||||
}
|
||||
}
|
||||
@@ -96,7 +96,7 @@ public class NfcOperationActivity extends BaseNfcActivity {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NFC_KEYTOCARD: {
|
||||
case NFC_MOVE_KEY_TO_CARD: {
|
||||
ProviderHelper providerHelper = new ProviderHelper(this);
|
||||
CanonicalizedSecretKeyRing secretKeyRing;
|
||||
try {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2014-2015 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||
* Copyright (C) 2010-2014 Thialfihar <thi@thialfihar.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
@@ -17,14 +18,11 @@
|
||||
|
||||
package org.sufficientlysecure.keychain.ui;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
@@ -32,15 +30,15 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import org.spongycastle.bcpg.CompressionAlgorithmTags;
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.compatibility.AppCompatPreferenceActivity;
|
||||
import org.sufficientlysecure.keychain.ui.widget.IntegerListPreference;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SettingsActivity extends PreferenceActivity {
|
||||
public class SettingsActivity extends AppCompatPreferenceActivity {
|
||||
|
||||
public static final String ACTION_PREFS_CLOUD = "org.sufficientlysecure.keychain.ui.PREFS_CLOUD";
|
||||
public static final String ACTION_PREFS_ADV = "org.sufficientlysecure.keychain.ui.PREFS_ADV";
|
||||
@@ -91,22 +89,6 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
initializePassphraseCacheTtl(
|
||||
(IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
|
||||
|
||||
int[] valueIds = new int[]{
|
||||
CompressionAlgorithmTags.UNCOMPRESSED,
|
||||
CompressionAlgorithmTags.ZIP,
|
||||
CompressionAlgorithmTags.ZLIB,
|
||||
CompressionAlgorithmTags.BZIP2,
|
||||
};
|
||||
String[] entries = new String[]{
|
||||
getString(R.string.choice_none) + " (" + getString(R.string.compression_fast) + ")",
|
||||
"ZIP (" + getString(R.string.compression_fast) + ")",
|
||||
"ZLIB (" + getString(R.string.compression_fast) + ")",
|
||||
"BZIP2 (" + getString(R.string.compression_very_slow) + ")",};
|
||||
String[] values = new String[valueIds.length];
|
||||
for (int i = 0; i < values.length; ++i) {
|
||||
values[i] = "" + valueIds[i];
|
||||
}
|
||||
|
||||
initializeUseDefaultYubiKeyPin(
|
||||
(CheckBoxPreference) findPreference(Constants.Pref.USE_DEFAULT_YUBIKEY_PIN));
|
||||
|
||||
@@ -122,13 +104,14 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
private void setupToolbar() {
|
||||
ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
|
||||
LinearLayout content = (LinearLayout) root.getChildAt(0);
|
||||
LinearLayout toolbarContainer = (LinearLayout) View.inflate(this, R.layout.preference_toolbar_activity, null);
|
||||
LinearLayout toolbarContainer = (LinearLayout) View.inflate(this, R.layout.preference_toolbar, null);
|
||||
|
||||
root.removeAllViews();
|
||||
toolbarContainer.addView(content);
|
||||
root.addView(toolbarContainer);
|
||||
|
||||
Toolbar toolbar = (Toolbar) toolbarContainer.findViewById(R.id.toolbar);
|
||||
|
||||
toolbar.setTitle(R.string.title_preferences);
|
||||
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp));
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@@ -168,7 +151,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
}
|
||||
|
||||
/**
|
||||
* This fragment shows the Cloud Search preferences in android 3.0+
|
||||
* This fragment shows the Cloud Search preferences
|
||||
*/
|
||||
public static class CloudSearchPrefsFragment extends PreferenceFragment {
|
||||
|
||||
@@ -226,7 +209,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
}
|
||||
|
||||
/**
|
||||
* This fragment shows the advanced preferences in android 3.0+
|
||||
* This fragment shows the PIN/password preferences
|
||||
*/
|
||||
public static class AdvancedPrefsFragment extends PreferenceFragment {
|
||||
|
||||
@@ -243,25 +226,6 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
initializePassphraseCacheTtl(
|
||||
(IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
|
||||
|
||||
int[] valueIds = new int[]{
|
||||
CompressionAlgorithmTags.UNCOMPRESSED,
|
||||
CompressionAlgorithmTags.ZIP,
|
||||
CompressionAlgorithmTags.ZLIB,
|
||||
CompressionAlgorithmTags.BZIP2,
|
||||
};
|
||||
|
||||
String[] entries = new String[]{
|
||||
getString(R.string.choice_none) + " (" + getString(R.string.compression_fast) + ")",
|
||||
"ZIP (" + getString(R.string.compression_fast) + ")",
|
||||
"ZLIB (" + getString(R.string.compression_fast) + ")",
|
||||
"BZIP2 (" + getString(R.string.compression_very_slow) + ")",
|
||||
};
|
||||
|
||||
String[] values = new String[valueIds.length];
|
||||
for (int i = 0; i < values.length; ++i) {
|
||||
values[i] = "" + valueIds[i];
|
||||
}
|
||||
|
||||
initializeUseDefaultYubiKeyPin(
|
||||
(CheckBoxPreference) findPreference(Constants.Pref.USE_DEFAULT_YUBIKEY_PIN));
|
||||
|
||||
@@ -270,7 +234,6 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||
protected boolean isValidFragment(String fragmentName) {
|
||||
return AdvancedPrefsFragment.class.getName().equals(fragmentName)
|
||||
|| CloudSearchPrefsFragment.class.getName().equals(fragmentName)
|
||||
|
||||
@@ -53,13 +53,15 @@ public class ViewKeyAdvActivity extends BaseActivity implements
|
||||
protected Uri mDataUri;
|
||||
|
||||
public static final String EXTRA_SELECTED_TAB = "selected_tab";
|
||||
public static final int TAB_MAIN = 0;
|
||||
public static final int TAB_SHARE = 1;
|
||||
public static final int TAB_SHARE = 0;
|
||||
public static final int TAB_IDENTITIES = 1;
|
||||
public static final int TAB_SUBKEYS = 2;
|
||||
public static final int TAB_CERTS = 3;
|
||||
public static final int TAB_KEYBASE = 4;
|
||||
|
||||
// view
|
||||
private ViewPager mViewPager;
|
||||
private PagerSlidingTabStrip mSlidingTabLayout;
|
||||
private PagerTabStripAdapter mTabsAdapter;
|
||||
|
||||
private static final int LOADER_ID_UNIFIED = 0;
|
||||
|
||||
@@ -80,11 +82,8 @@ public class ViewKeyAdvActivity extends BaseActivity implements
|
||||
mViewPager = (ViewPager) findViewById(R.id.pager);
|
||||
mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.sliding_tab_layout);
|
||||
|
||||
int switchToTab = TAB_MAIN;
|
||||
Intent intent = getIntent();
|
||||
if (intent.getExtras() != null && intent.getExtras().containsKey(EXTRA_SELECTED_TAB)) {
|
||||
switchToTab = intent.getExtras().getInt(EXTRA_SELECTED_TAB);
|
||||
}
|
||||
int switchToTab = intent.getIntExtra(EXTRA_SELECTED_TAB, TAB_SHARE);
|
||||
|
||||
mDataUri = getIntent().getData();
|
||||
if (mDataUri == null) {
|
||||
@@ -102,8 +101,6 @@ public class ViewKeyAdvActivity extends BaseActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString());
|
||||
|
||||
// Prepare the loaders. Either re-connect with an existing ones,
|
||||
// or start new ones.
|
||||
getSupportLoaderManager().initLoader(LOADER_ID_UNIFIED, null, this);
|
||||
@@ -120,32 +117,32 @@ public class ViewKeyAdvActivity extends BaseActivity implements
|
||||
}
|
||||
|
||||
private void initTabs(Uri dataUri) {
|
||||
mTabsAdapter = new PagerTabStripAdapter(this);
|
||||
mViewPager.setAdapter(mTabsAdapter);
|
||||
PagerTabStripAdapter adapter = new PagerTabStripAdapter(this);
|
||||
mViewPager.setAdapter(adapter);
|
||||
|
||||
Bundle shareBundle = new Bundle();
|
||||
shareBundle.putParcelable(ViewKeyAdvUserIdsFragment.ARG_DATA_URI, dataUri);
|
||||
mTabsAdapter.addTab(ViewKeyAdvShareFragment.class,
|
||||
adapter.addTab(ViewKeyAdvShareFragment.class,
|
||||
shareBundle, getString(R.string.key_view_tab_share));
|
||||
|
||||
Bundle userIdsBundle = new Bundle();
|
||||
userIdsBundle.putParcelable(ViewKeyAdvUserIdsFragment.ARG_DATA_URI, dataUri);
|
||||
mTabsAdapter.addTab(ViewKeyAdvUserIdsFragment.class,
|
||||
adapter.addTab(ViewKeyAdvUserIdsFragment.class,
|
||||
userIdsBundle, getString(R.string.section_user_ids));
|
||||
|
||||
Bundle keysBundle = new Bundle();
|
||||
keysBundle.putParcelable(ViewKeyAdvSubkeysFragment.ARG_DATA_URI, dataUri);
|
||||
mTabsAdapter.addTab(ViewKeyAdvSubkeysFragment.class,
|
||||
adapter.addTab(ViewKeyAdvSubkeysFragment.class,
|
||||
keysBundle, getString(R.string.key_view_tab_keys));
|
||||
|
||||
Bundle certsBundle = new Bundle();
|
||||
certsBundle.putParcelable(ViewKeyAdvCertsFragment.ARG_DATA_URI, dataUri);
|
||||
mTabsAdapter.addTab(ViewKeyAdvCertsFragment.class,
|
||||
adapter.addTab(ViewKeyAdvCertsFragment.class,
|
||||
certsBundle, getString(R.string.key_view_tab_certs));
|
||||
|
||||
Bundle trustBundle = new Bundle();
|
||||
trustBundle.putParcelable(ViewKeyTrustFragment.ARG_DATA_URI, dataUri);
|
||||
mTabsAdapter.addTab(ViewKeyTrustFragment.class,
|
||||
adapter.addTab(ViewKeyTrustFragment.class,
|
||||
trustBundle, getString(R.string.key_view_tab_keybase));
|
||||
|
||||
// update layout after operations
|
||||
@@ -185,11 +182,8 @@ public class ViewKeyAdvActivity extends BaseActivity implements
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
|
||||
/* TODO better error handling? May cause problems when a key is deleted,
|
||||
* because the notification triggers faster than the activity closes.
|
||||
*/
|
||||
// Avoid NullPointerExceptions...
|
||||
if (data.getCount() == 0) {
|
||||
if (data == null || data.getCount() == 0) {
|
||||
return;
|
||||
}
|
||||
// Swap the new cursor in. (The framework will take care of closing the
|
||||
|
||||
@@ -17,6 +17,13 @@
|
||||
|
||||
package org.sufficientlysecure.keychain.ui;
|
||||
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityOptions;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
@@ -43,12 +50,10 @@ import android.widget.TextView;
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
|
||||
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
|
||||
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.Keys;
|
||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||
import org.sufficientlysecure.keychain.provider.TemporaryStorageProvider;
|
||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||
@@ -57,57 +62,35 @@ import org.sufficientlysecure.keychain.ui.util.QrCodeUtils;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
import org.sufficientlysecure.keychain.util.NfcHelper;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
|
||||
public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
LoaderManager.LoaderCallbacks<Cursor> {
|
||||
|
||||
public static final String ARG_DATA_URI = "uri";
|
||||
|
||||
private TextView mFingerprint;
|
||||
private ImageView mQrCode;
|
||||
private CardView mQrCodeLayout;
|
||||
private View mFingerprintShareButton;
|
||||
private View mFingerprintClipboardButton;
|
||||
private View mKeyShareButton;
|
||||
private View mKeyClipboardButton;
|
||||
private View mKeyNfcButton;
|
||||
private ImageButton mKeySafeSlingerButton;
|
||||
private View mKeyUploadButton;
|
||||
private TextView mFingerprintView;
|
||||
|
||||
ProviderHelper mProviderHelper;
|
||||
NfcHelper mNfcHelper;
|
||||
|
||||
private static final int LOADER_ID_UNIFIED = 0;
|
||||
|
||||
private Uri mDataUri;
|
||||
|
||||
private byte[] mFingerprint;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
|
||||
View root = super.onCreateView(inflater, superContainer, savedInstanceState);
|
||||
View view = inflater.inflate(R.layout.view_key_adv_share_fragment, getContainer());
|
||||
|
||||
mProviderHelper = new ProviderHelper(ViewKeyAdvShareFragment.this.getActivity());
|
||||
mNfcHelper = new NfcHelper(getActivity(), mProviderHelper);
|
||||
ProviderHelper providerHelper = new ProviderHelper(ViewKeyAdvShareFragment.this.getActivity());
|
||||
mNfcHelper = new NfcHelper(getActivity(), providerHelper);
|
||||
|
||||
mFingerprint = (TextView) view.findViewById(R.id.view_key_fingerprint);
|
||||
mFingerprintView = (TextView) view.findViewById(R.id.view_key_fingerprint);
|
||||
mQrCode = (ImageView) view.findViewById(R.id.view_key_qr_code);
|
||||
mQrCodeLayout = (CardView) view.findViewById(R.id.view_key_qr_code_layout);
|
||||
mFingerprintShareButton = view.findViewById(R.id.view_key_action_fingerprint_share);
|
||||
mFingerprintClipboardButton = view.findViewById(R.id.view_key_action_fingerprint_clipboard);
|
||||
mKeyShareButton = view.findViewById(R.id.view_key_action_key_share);
|
||||
mKeyNfcButton = view.findViewById(R.id.view_key_action_key_nfc);
|
||||
mKeyClipboardButton = view.findViewById(R.id.view_key_action_key_clipboard);
|
||||
mKeySafeSlingerButton = (ImageButton) view.findViewById(R.id.view_key_action_key_safeslinger);
|
||||
mKeyUploadButton = view.findViewById(R.id.view_key_action_upload);
|
||||
|
||||
mKeySafeSlingerButton.setColorFilter(getResources().getColor(R.color.tertiary_text_light),
|
||||
PorterDuff.Mode.SRC_IN);
|
||||
|
||||
mQrCodeLayout.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -115,50 +98,60 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
}
|
||||
});
|
||||
|
||||
mFingerprintShareButton.setOnClickListener(new View.OnClickListener() {
|
||||
View vFingerprintShareButton = view.findViewById(R.id.view_key_action_fingerprint_share);
|
||||
View vFingerprintClipboardButton = view.findViewById(R.id.view_key_action_fingerprint_clipboard);
|
||||
View vKeyShareButton = view.findViewById(R.id.view_key_action_key_share);
|
||||
View vKeyNfcButton = view.findViewById(R.id.view_key_action_key_nfc);
|
||||
View vKeyClipboardButton = view.findViewById(R.id.view_key_action_key_clipboard);
|
||||
ImageButton vKeySafeSlingerButton = (ImageButton) view.findViewById(R.id.view_key_action_key_safeslinger);
|
||||
View vKeyUploadButton = view.findViewById(R.id.view_key_action_upload);
|
||||
vKeySafeSlingerButton.setColorFilter(getResources().getColor(R.color.tertiary_text_light),
|
||||
PorterDuff.Mode.SRC_IN);
|
||||
|
||||
vFingerprintShareButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
share(mDataUri, mProviderHelper, true, false);
|
||||
share(true, false);
|
||||
}
|
||||
});
|
||||
mFingerprintClipboardButton.setOnClickListener(new View.OnClickListener() {
|
||||
vFingerprintClipboardButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
share(mDataUri, mProviderHelper, true, true);
|
||||
share(true, true);
|
||||
}
|
||||
});
|
||||
mKeyShareButton.setOnClickListener(new View.OnClickListener() {
|
||||
vKeyShareButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
share(mDataUri, mProviderHelper, false, false);
|
||||
share(false, false);
|
||||
}
|
||||
});
|
||||
mKeyClipboardButton.setOnClickListener(new View.OnClickListener() {
|
||||
vKeyClipboardButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
share(mDataUri, mProviderHelper, false, true);
|
||||
share(false, true);
|
||||
}
|
||||
});
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
mKeyNfcButton.setVisibility(View.VISIBLE);
|
||||
mKeyNfcButton.setOnClickListener(new View.OnClickListener() {
|
||||
vKeyNfcButton.setVisibility(View.VISIBLE);
|
||||
vKeyNfcButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mNfcHelper.invokeNfcBeam();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mKeyNfcButton.setVisibility(View.GONE);
|
||||
vKeyNfcButton.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
mKeySafeSlingerButton.setOnClickListener(new View.OnClickListener() {
|
||||
vKeySafeSlingerButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
startSafeSlinger(mDataUri);
|
||||
}
|
||||
});
|
||||
mKeyUploadButton.setOnClickListener(new View.OnClickListener() {
|
||||
vKeyUploadButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
uploadToKeyserver();
|
||||
@@ -182,97 +175,79 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
startActivityForResult(safeSlingerIntent, 0);
|
||||
}
|
||||
|
||||
private void share(Uri dataUri, ProviderHelper providerHelper, boolean fingerprintOnly,
|
||||
boolean toClipboard) {
|
||||
private void share(boolean fingerprintOnly, boolean toClipboard) {
|
||||
Activity activity = getActivity();
|
||||
if (activity == null || mFingerprint == null) {
|
||||
return;
|
||||
}
|
||||
ProviderHelper providerHelper = new ProviderHelper(activity);
|
||||
|
||||
try {
|
||||
String content;
|
||||
byte[] fingerprintData = (byte[]) providerHelper.getGenericData(
|
||||
KeyRings.buildUnifiedKeyRingUri(dataUri),
|
||||
Keys.FINGERPRINT, ProviderHelper.FIELD_TYPE_BLOB);
|
||||
if (fingerprintOnly) {
|
||||
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(fingerprintData);
|
||||
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(mFingerprint);
|
||||
if (!toClipboard) {
|
||||
content = Constants.FINGERPRINT_SCHEME + ":" + fingerprint;
|
||||
} else {
|
||||
content = fingerprint;
|
||||
}
|
||||
} else {
|
||||
Uri uri = KeychainContract.KeyRingData.buildPublicKeyRingUri(dataUri);
|
||||
// get public keyring as ascii armored string
|
||||
content = providerHelper.getKeyRingAsArmoredString(uri);
|
||||
content = providerHelper.getKeyRingAsArmoredString(
|
||||
KeychainContract.KeyRingData.buildPublicKeyRingUri(mDataUri));
|
||||
}
|
||||
|
||||
if (toClipboard) {
|
||||
ClipboardReflection.copyToClipboard(getActivity(), content);
|
||||
String message;
|
||||
if (fingerprintOnly) {
|
||||
message = getResources().getString(R.string.fingerprint_copied_to_clipboard);
|
||||
} else {
|
||||
message = getResources().getString(R.string.key_copied_to_clipboard);
|
||||
}
|
||||
Notify.create(getActivity(), message, Notify.Style.OK).show();
|
||||
} else {
|
||||
// Android will fail with android.os.TransactionTooLargeException if key is too big
|
||||
// see http://www.lonestarprod.com/?p=34
|
||||
if (content.length() >= 86389) {
|
||||
Notify.create(getActivity(), R.string.key_too_big_for_sharing,
|
||||
Notify.Style.ERROR).show();
|
||||
return;
|
||||
}
|
||||
|
||||
// let user choose application
|
||||
Intent sendIntent = new Intent(Intent.ACTION_SEND);
|
||||
sendIntent.putExtra(Intent.EXTRA_TEXT, content);
|
||||
sendIntent.setType("text/plain");
|
||||
|
||||
String title;
|
||||
if (fingerprintOnly) {
|
||||
title = getResources().getString(R.string.title_share_fingerprint_with);
|
||||
} else {
|
||||
title = getResources().getString(R.string.title_share_key);
|
||||
}
|
||||
Intent shareChooser = Intent.createChooser(sendIntent, title);
|
||||
|
||||
// Bluetooth Share will convert text/plain sent via EXTRA_TEXT to HTML
|
||||
// Add replacement extra to send a text/plain file instead.
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
try {
|
||||
String primaryUserId = UncachedKeyRing.decodeFromData(content.getBytes()).
|
||||
getPublicKey().getPrimaryUserIdWithFallback();
|
||||
|
||||
TemporaryStorageProvider shareFileProv = new TemporaryStorageProvider();
|
||||
Uri contentUri = TemporaryStorageProvider.createFile(getActivity(),
|
||||
primaryUserId + Constants.FILE_EXTENSION_ASC);
|
||||
|
||||
BufferedWriter contentWriter = new BufferedWriter(new OutputStreamWriter(
|
||||
new ParcelFileDescriptor.AutoCloseOutputStream(
|
||||
shareFileProv.openFile(contentUri, "w"))));
|
||||
contentWriter.write(content);
|
||||
contentWriter.close();
|
||||
|
||||
// create replacement extras inside try{}:
|
||||
// if file creation fails, just don't add the replacements
|
||||
Bundle replacements = new Bundle();
|
||||
shareChooser.putExtra(Intent.EXTRA_REPLACEMENT_EXTRAS, replacements);
|
||||
|
||||
Bundle bluetoothExtra = new Bundle(sendIntent.getExtras());
|
||||
replacements.putBundle("com.android.bluetooth", bluetoothExtra);
|
||||
|
||||
bluetoothExtra.putParcelable(Intent.EXTRA_STREAM, contentUri);
|
||||
} catch (FileNotFoundException e) {
|
||||
Log.e(Constants.TAG, "error creating temporary Bluetooth key share file!", e);
|
||||
Notify.create(getActivity(), R.string.error_bluetooth_file, Notify.Style.ERROR).show();
|
||||
}
|
||||
}
|
||||
|
||||
startActivity(shareChooser);
|
||||
ClipboardReflection.copyToClipboard(activity, content);
|
||||
Notify.create(activity, fingerprintOnly ? R.string.fingerprint_copied_to_clipboard
|
||||
: R.string.key_copied_to_clipboard, Notify.Style.OK).show();
|
||||
return;
|
||||
}
|
||||
|
||||
// Android will fail with android.os.TransactionTooLargeException if key is too big
|
||||
// see http://www.lonestarprod.com/?p=34
|
||||
if (content.length() >= 86389) {
|
||||
Notify.create(activity, R.string.key_too_big_for_sharing, Notify.Style.ERROR).show();
|
||||
return;
|
||||
}
|
||||
|
||||
// let user choose application
|
||||
Intent sendIntent = new Intent(Intent.ACTION_SEND);
|
||||
sendIntent.putExtra(Intent.EXTRA_TEXT, content);
|
||||
sendIntent.setType("text/plain");
|
||||
|
||||
// Bluetooth Share will convert text/plain sent via EXTRA_TEXT to HTML
|
||||
// Add replacement extra to send a text/plain file instead.
|
||||
try {
|
||||
TemporaryStorageProvider shareFileProv = new TemporaryStorageProvider();
|
||||
Uri contentUri = TemporaryStorageProvider.createFile(activity,
|
||||
KeyFormattingUtils.convertFingerprintToHex(mFingerprint) + Constants.FILE_EXTENSION_ASC);
|
||||
|
||||
BufferedWriter contentWriter = new BufferedWriter(new OutputStreamWriter(
|
||||
new ParcelFileDescriptor.AutoCloseOutputStream(
|
||||
shareFileProv.openFile(contentUri, "w"))));
|
||||
contentWriter.write(content);
|
||||
contentWriter.close();
|
||||
|
||||
sendIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
|
||||
} catch (FileNotFoundException e) {
|
||||
Log.e(Constants.TAG, "error creating temporary Bluetooth key share file!", e);
|
||||
// no need for a snackbar because one sharing option doesn't work
|
||||
// Notify.create(getActivity(), R.string.error_temp_file, Notify.Style.ERROR).show();
|
||||
}
|
||||
|
||||
|
||||
String title = getString(fingerprintOnly
|
||||
? R.string.title_share_fingerprint_with : R.string.title_share_key);
|
||||
Intent shareChooser = Intent.createChooser(sendIntent, title);
|
||||
|
||||
startActivity(shareChooser);
|
||||
|
||||
} catch (PgpGeneralException | IOException e) {
|
||||
Log.e(Constants.TAG, "error processing key!", e);
|
||||
Notify.create(getActivity(), R.string.error_key_processing, Notify.Style.ERROR).show();
|
||||
Notify.create(activity, R.string.error_key_processing, Notify.Style.ERROR).show();
|
||||
} catch (ProviderHelper.NotFoundException e) {
|
||||
Log.e(Constants.TAG, "key not found!", e);
|
||||
Notify.create(getActivity(), R.string.error_key_not_found, Notify.Style.ERROR).show();
|
||||
Notify.create(activity, R.string.error_key_not_found, Notify.Style.ERROR).show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -293,8 +268,8 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
|
||||
if (dataUri == null) {
|
||||
@@ -309,8 +284,6 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
private void loadData(Uri dataUri) {
|
||||
mDataUri = dataUri;
|
||||
|
||||
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString());
|
||||
|
||||
// Prepare the loaders. Either re-connect with an existing ones,
|
||||
// or start new ones.
|
||||
getLoaderManager().initLoader(LOADER_ID_UNIFIED, null, this);
|
||||
@@ -320,19 +293,10 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
}
|
||||
|
||||
static final String[] UNIFIED_PROJECTION = new String[] {
|
||||
KeyRings._ID, KeyRings.MASTER_KEY_ID, KeyRings.HAS_ANY_SECRET,
|
||||
KeyRings.USER_ID, KeyRings.FINGERPRINT,
|
||||
KeyRings.ALGORITHM, KeyRings.KEY_SIZE, KeyRings.CREATION, KeyRings.IS_EXPIRED,
|
||||
|
||||
KeyRings._ID, KeyRings.FINGERPRINT
|
||||
};
|
||||
static final int INDEX_UNIFIED_MASTER_KEY_ID = 1;
|
||||
static final int INDEX_UNIFIED_HAS_ANY_SECRET = 2;
|
||||
static final int INDEX_UNIFIED_USER_ID = 3;
|
||||
static final int INDEX_UNIFIED_FINGERPRINT = 4;
|
||||
static final int INDEX_UNIFIED_ALGORITHM = 5;
|
||||
static final int INDEX_UNIFIED_KEY_SIZE = 6;
|
||||
static final int INDEX_UNIFIED_CREATION = 7;
|
||||
static final int INDEX_UNIFIED_ID_EXPIRED = 8;
|
||||
|
||||
static final int INDEX_UNIFIED_FINGERPRINT = 1;
|
||||
|
||||
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||
setContentShown(false);
|
||||
@@ -348,11 +312,8 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
}
|
||||
|
||||
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
|
||||
/* TODO better error handling? May cause problems when a key is deleted,
|
||||
* because the notification triggers faster than the activity closes.
|
||||
*/
|
||||
// Avoid NullPointerExceptions...
|
||||
if (data.getCount() == 0) {
|
||||
if (data == null || data.getCount() == 0) {
|
||||
return;
|
||||
}
|
||||
// Swap the new cursor in. (The framework will take care of closing the
|
||||
@@ -362,10 +323,7 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
if (data.moveToFirst()) {
|
||||
|
||||
byte[] fingerprintBlob = data.getBlob(INDEX_UNIFIED_FINGERPRINT);
|
||||
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(fingerprintBlob);
|
||||
mFingerprint.setText(KeyFormattingUtils.colorizeFingerprint(fingerprint));
|
||||
|
||||
loadQrCode(fingerprint);
|
||||
setFingerprint(fingerprintBlob);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -380,14 +338,16 @@ public class ViewKeyAdvShareFragment extends LoaderFragment implements
|
||||
* We need to make sure we are no longer using it.
|
||||
*/
|
||||
public void onLoaderReset(Loader<Cursor> loader) {
|
||||
mFingerprint = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load QR Code asynchronously and with a fade in animation
|
||||
*
|
||||
* @param fingerprint
|
||||
*/
|
||||
private void loadQrCode(final String fingerprint) {
|
||||
/** Load QR Code asynchronously and with a fade in animation */
|
||||
private void setFingerprint(byte[] fingerprintBlob) {
|
||||
mFingerprint = fingerprintBlob;
|
||||
|
||||
final String fingerprint = KeyFormattingUtils.convertFingerprintToHex(fingerprintBlob);
|
||||
mFingerprintView.setText(KeyFormattingUtils.colorizeFingerprint(fingerprint));
|
||||
|
||||
AsyncTask<Void, Void, Bitmap> loadTask =
|
||||
new AsyncTask<Void, Void, Bitmap>() {
|
||||
protected Bitmap doInBackground(Void... unused) {
|
||||
|
||||
@@ -94,7 +94,7 @@ public abstract class BaseNfcActivity extends BaseActivity {
|
||||
public void onNewIntent(Intent intent) {
|
||||
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
|
||||
try {
|
||||
handleNdefDiscoveredIntent(intent);
|
||||
handleTagDiscoveredIntent(intent);
|
||||
} catch (CardException e) {
|
||||
handleNfcError(e);
|
||||
} catch (IOException e) {
|
||||
@@ -269,7 +269,7 @@ public abstract class BaseNfcActivity extends BaseActivity {
|
||||
* This method is called by onNewIntent above upon discovery of an NFC tag.
|
||||
* It handles initialization and login to the application, subsequently
|
||||
* calls either nfcCalculateSignature() or nfcDecryptSessionKey(), then
|
||||
* finishes the activity with an appropiate result.
|
||||
* finishes the activity with an appropriate result.
|
||||
*
|
||||
* On general communication, see also
|
||||
* http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_annex-a.aspx
|
||||
@@ -278,7 +278,7 @@ public abstract class BaseNfcActivity extends BaseActivity {
|
||||
* on ISO SmartCard Systems specification.
|
||||
*
|
||||
*/
|
||||
protected void handleNdefDiscoveredIntent(Intent intent) throws IOException {
|
||||
protected void handleTagDiscoveredIntent(Intent intent) throws IOException {
|
||||
|
||||
Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu
|
||||
Activity activity = mUseFragment ? mFragment.getActivity() : mActivity;
|
||||
|
||||
switch (requiredInput.mType) {
|
||||
case NFC_KEYTOCARD:
|
||||
case NFC_MOVE_KEY_TO_CARD:
|
||||
case NFC_DECRYPT:
|
||||
case NFC_SIGN: {
|
||||
Intent intent = new Intent(activity, NfcOperationActivity.class);
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true"
|
||||
android:layout_above="@+id/create_key_buttons">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/first_time_blank_yubikey" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="@color/holo_gray_bright"
|
||||
android:id="@+id/create_key_buttons">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/create_key_back_button"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/btn_back"
|
||||
android:textAllCaps="true"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:drawableLeft="@drawable/ic_chevron_left_grey_24dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="left|center_vertical"
|
||||
android:clickable="true"
|
||||
style="?android:attr/borderlessButtonStyle"
|
||||
android:layout_gravity="center_vertical" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/create_key_next_button"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/first_time_blank_yubikey_yes"
|
||||
android:textAllCaps="true"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:drawableRight="@drawable/ic_chevron_right_grey_24dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="center_vertical|right"
|
||||
android:clickable="true"
|
||||
style="?android:attr/borderlessButtonStyle"
|
||||
android:layout_gravity="center_vertical" />
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
@@ -6,15 +6,16 @@
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:fillViewport="true">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/encrypt_text_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:gravity="top"
|
||||
android:inputType="text|textCapSentences|textMultiLine|textLongMessage"
|
||||
android:hint="@string/encrypt_content_edit_text_hint" />
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<include
|
||||
android:id="@+id/toolbar_include"
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/decrypt_save"
|
||||
android:title="@string/btn_save"
|
||||
android:title="@string/btn_save_file"
|
||||
android:icon="@drawable/ic_action_encrypt_file_24dp"
|
||||
/>
|
||||
|
||||
|
||||
65
OpenKeychain/src/main/res/raw-ar/help_about.md
Normal file
65
OpenKeychain/src/main/res/raw-ar/help_about.md
Normal file
@@ -0,0 +1,65 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
* Bahtiar 'kalkin' Gadimov
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
|
||||
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
|
||||
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
|
||||
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
28
OpenKeychain/src/main/res/raw-ar/help_certification.md
Normal file
28
OpenKeychain/src/main/res/raw-ar/help_certification.md
Normal file
@@ -0,0 +1,28 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
## Key Confirmation
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
|
||||
## Key Status
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
|
||||
## Advanced Information
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
|
||||
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
|
||||
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
|
||||
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.
|
||||
278
OpenKeychain/src/main/res/raw-ar/help_changelog.md
Normal file
278
OpenKeychain/src/main/res/raw-ar/help_changelog.md
Normal file
@@ -0,0 +1,278 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
* Redesigned key screen
|
||||
* Simplify crypto preferences, better selection of secure ciphers
|
||||
* API: Detached signatures, free selection of signing key,...
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
|
||||
* Fix key export to files (now for real)
|
||||
|
||||
|
||||
## 3.1.1
|
||||
|
||||
* Fix key export to files (they were written partially)
|
||||
* Fix crash on Android 2.3
|
||||
|
||||
|
||||
## 3.1
|
||||
|
||||
* Fix crash on Android 5
|
||||
* New certify screen
|
||||
* Secure Exchange directly from key list (SafeSlinger library)
|
||||
* New QR Code program flow
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
|
||||
* Better handling of large key imports
|
||||
* Improved subkey selection
|
||||
|
||||
|
||||
## 3.0
|
||||
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
* Honor and display key authenticate flags
|
||||
* User interface to generate custom keys
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
|
||||
* Split encrypt screen into two
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
* OpenPGP API now handles revoked/expired keys and returns all user ids
|
||||
|
||||
|
||||
## 2.9
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
* So many bugs have been fixed in this release that we focus on the main new features
|
||||
* Key edit: awesome new design, key revocation
|
||||
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
|
||||
* New first time screen
|
||||
* 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
|
||||
* New icons to show status of key (by Brennan Novak)
|
||||
* Important bug fix: Importing of large key collections from a file is now possible
|
||||
* Notification showing cached passphrases
|
||||
* Keys are connected to Android's contacts
|
||||
|
||||
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
|
||||
|
||||
## 2.7
|
||||
|
||||
* Purple! (Dominik, Vincent)
|
||||
* New key view design (Dominik, Vincent)
|
||||
* New flat Android buttons (Dominik, Vincent)
|
||||
* API fixes (Dominik)
|
||||
* Keybase.io import (Tim Bray)
|
||||
|
||||
|
||||
## 2.6.1
|
||||
|
||||
* Some fixes for regression bugs
|
||||
|
||||
|
||||
## 2.6
|
||||
|
||||
* Key certifications (thanks to Vincent Breitmoser)
|
||||
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
|
||||
* New design for signature verification
|
||||
* Custom key length (thanks to Greg Witczak)
|
||||
* Fix share-functionality from other apps
|
||||
|
||||
|
||||
## 2.5
|
||||
|
||||
* Fix decryption of symmetric OpenPGP messages/files
|
||||
* Refactored key edit screen (thanks to Ash Hughes)
|
||||
* New modern design for encrypt/decrypt screens
|
||||
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
|
||||
|
||||
|
||||
## 2.4
|
||||
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.
|
||||
|
||||
* New unified key list
|
||||
* Colorized key fingerprint
|
||||
* Support for keyserver ports
|
||||
* Deactivate possibility to generate weak keys
|
||||
* Much more internal work on the API
|
||||
* Certify user ids
|
||||
* Keyserver query based on machine-readable output
|
||||
* Lock navigation drawer on tablets
|
||||
* Suggestions for emails on creation of keys
|
||||
* Search in public key lists
|
||||
* And much more improvements and fixes…
|
||||
|
||||
|
||||
## 2.3.1
|
||||
|
||||
* Hotfix for crash when upgrading from old versions
|
||||
|
||||
|
||||
## 2.3
|
||||
|
||||
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
|
||||
* Fix setting expiry dates on keys (thanks to Ash Hughes)
|
||||
* More internal fixes when editing keys (thanks to Ash Hughes)
|
||||
* Querying keyservers directly from the import screen
|
||||
* Fix layout and dialog style on Android 2.2-3.0
|
||||
* Fix crash on keys with empty user ids
|
||||
* Fix crash and empty lists when coming back from signing screen
|
||||
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
|
||||
* Fix upload of key from signing screen
|
||||
|
||||
|
||||
## 2.2
|
||||
|
||||
* New design with navigation drawer
|
||||
* New public key list design
|
||||
* New public key view
|
||||
* Bug fixes for importing of keys
|
||||
* Key cross-certification (thanks to Ash Hughes)
|
||||
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
|
||||
* First version with new languages (thanks to the contributors on Transifex)
|
||||
* Sharing of keys via QR Codes fixed and improved
|
||||
* Package signature verification for API
|
||||
|
||||
|
||||
## 2.1.1
|
||||
|
||||
* API Updates, preparation for K-9 Mail integration
|
||||
|
||||
|
||||
## 2.1
|
||||
|
||||
* Lots of bug fixes
|
||||
* New API for developers
|
||||
* PRNG bug fix by Google
|
||||
|
||||
|
||||
## 2.0
|
||||
|
||||
* Complete redesign
|
||||
* Share public keys via QR codes, NFC beam
|
||||
* Sign keys
|
||||
* Upload keys to server
|
||||
* Fixes import issues
|
||||
* New AIDL API
|
||||
|
||||
|
||||
## 1.0.8
|
||||
|
||||
* Basic keyserver support
|
||||
* App2sd
|
||||
* More choices for passphrase cache: 1, 2, 4, 8, hours
|
||||
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
|
||||
* Bugfixes
|
||||
* Optimizations
|
||||
|
||||
|
||||
## 1.0.7
|
||||
|
||||
* Fixed problem with signature verification of texts with trailing newline
|
||||
* More options for passphrase cache time to live (20, 40, 60 mins)
|
||||
|
||||
|
||||
## 1.0.6
|
||||
|
||||
* Account adding crash on Froyo fixed
|
||||
* Secure file deletion
|
||||
* Option to delete key file after import
|
||||
* Stream encryption/decryption (gallery, etc.)
|
||||
* New options (language, force v3 signatures)
|
||||
* Interface changes
|
||||
* Bugfixes
|
||||
|
||||
|
||||
## 1.0.5
|
||||
|
||||
* German and Italian translation
|
||||
* Much smaller package, due to reduced BC sources
|
||||
* New preferences GUI
|
||||
* Layout adjustment for localization
|
||||
* Signature bugfix
|
||||
|
||||
|
||||
## 1.0.4
|
||||
|
||||
* Fixed another crash caused by some SDK bug with query builder
|
||||
|
||||
|
||||
## 1.0.3
|
||||
|
||||
* Fixed crashes during encryption/signing and possibly key export
|
||||
|
||||
|
||||
## 1.0.2
|
||||
|
||||
* Filterable key lists
|
||||
* Smarter pre-selection of encryption keys
|
||||
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
|
||||
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
|
||||
|
||||
|
||||
## 1.0.1
|
||||
|
||||
* GMail account listing was broken in 1.0.0, fixed again
|
||||
|
||||
|
||||
## 1.0.0
|
||||
|
||||
* K-9 Mail integration, APG supporting beta build of K-9 Mail
|
||||
* Support of more file managers (including ASTRO)
|
||||
* Slovenian translation
|
||||
* New database, much faster, less memory usage
|
||||
* Defined Intents and content provider for other apps
|
||||
* Bugfixes
|
||||
16
OpenKeychain/src/main/res/raw-ar/help_start.md
Normal file
16
OpenKeychain/src/main/res/raw-ar/help_start.md
Normal file
@@ -0,0 +1,16 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
## How do I activate OpenKeychain in K-9 Mail?
|
||||
To use OpenKeychain with K-9 Mail, you want to follow these steps:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
|
||||
|
||||
## I found a bug in OpenKeychain!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Contribute
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Translations
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (Beachte: Bitte schreibe jeden Satz in eine eigene Zeile, Transifex wird jede Zeile in ein eigenes Übesetzungsfeld setzen!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
Lizenz: GPLv3+
|
||||
|
||||
## Entwickler
|
||||
## Hauptentwickler
|
||||
* Dominik Schürmann (Leitender Entwickler)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Beitragende
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ Lizenz: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG-Entwickler)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Bibliotheken
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11-Lizenz)
|
||||
@@ -38,9 +57,9 @@ Lizenz: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache-Lizenz v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache-Lizenz v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache-Lizenz v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material-Design)</a> (Apache-Lizenz v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache-Lizenz v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache-Lizenz v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT-Lizenz)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache-Lizenz v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache-Lizenz v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache-Lizenz v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache-Lizenz v2)
|
||||
@@ -1,28 +1,28 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (Beachte: Bitte schreibe jeden Satz in eine eigene Zeile, Transifex wird jede Zeile in ein eigenes Übesetzungsfeld setzen!)
|
||||
|
||||
## Schlüsselbestätigung
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
Ohne Bestätigung können sie nicht wissen, ob ein Schlüssel wirklich zu einer bestimmten Person gehört.
|
||||
Der einfachste Weg einen Schlüssel zu bestätigen ist den QR Code zu scannen oder ihn mit NFC auszutauschen.
|
||||
Um Schlüssel zwischen mehr als zwei Personen zu bestätigen empfehlen wir die Schlüsseltausch Methode zu benutzen, welche für ihren Schlüssel verfügbar ist.
|
||||
|
||||
## Schlüsselstatus
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
Bestätigt: Sie haben bereits den Schlüssel bestätigt, zum Beispiel durch das Scannen eines QR Codes.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
Unbestätigt: Diese Key wurde noch nicht beglaubigt. Sie können nicht sicher sein, ob dieser Key wirklich zu einer bestimmten Person gehört.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
Abgelaufen: Der Key ist nicht mehr gültig. Nur der Besitzer kann die Gültigkeit des Schlüssels verlängern.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
Widerrufen: Dieser Schlüssel ist nicht mehr gültig. Er wurde von dem Besitzer widerrufen.
|
||||
|
||||
## Erweiterte Informationen
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
Eine "Schlüsselbestätigung" in OpenKeychain ist implementiert mit dem Erstellen eines Zertifikats bei Beachtung von dem OpenPGP Standard.
|
||||
Diese Zertifizierung ist eine ["generische Zertifizierung (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1), im Standard beschrieben durch:
|
||||
"Der Ersteller dieser Zertifizierung macht keine Behauptungen darüber, wie gut der Zertifizierer geprüft hat, dass der Schlüsselinhaber tatsächlich die Person ist, die in der Benutzer-ID beschrieben wird."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
|
||||
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
|
||||
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
|
||||
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.
|
||||
Normalerweise sind Zertifizierungen (auch höherer Zertifizierungsniveaus, wie z.B. "positive Zertifizierungen" (0x13)) im OpenPGP-Web of Trust organisiert.
|
||||
Unser Modell der Schlüsselbestätigung ist ein viel einfacheres Konzept, um allgemeine Nutzbarkeitsprobleme zu vermeiden, die mit diesem Web of Trust verknüpft sind.
|
||||
Wir nehmen an, dass Schlüssel nur bis zu einem gewissen Maß bestätigt werden, dass immer noch nutzbar genug ist, um es unterwegs benutzen zu können.
|
||||
Wir implementieren auch nicht (möglicherweise transitive) Vertrauenssignaturen oder eine Besitzervertrauensdatenbank wie in GnuPG.
|
||||
Weiter werden Schlüssel, die mindestens eine Benutzer-ID enthalten, die von einem vertrauten Schlüssel unterschrieben ist, in der Schlüsselliste als "bestätigt" markiert.
|
||||
@@ -1,28 +1,37 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Erste Version mit kompletter YubiKey-Unterstützung in der Benutzeroberfläche: Schlüssel bearbeiten, YubiKey mit Schlüsseln verbinden,…
|
||||
* Material-Design
|
||||
* QR-Scanner-Integration (benötigt neue Berechtigungen)
|
||||
* Schlüsselerzeugungsassistent verbessert
|
||||
* Fehlende Kontakte nach Synchronisierung behoben
|
||||
* Benötigt Android 4
|
||||
* Redesigned key screen
|
||||
* Simplify crypto preferences, better selection of secure ciphers
|
||||
* API: Detached signatures, free selection of signing key,...
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Neuer Schlüsselbildschirm
|
||||
* Krypto-Einstellungen vereinfacht, bessere Auswahl sicherer Verschlüsselungsverfahren
|
||||
* API: abgetrennte Signaturen, freie Wahl des Signaturschlüssels,...
|
||||
* Behoben: Einige gültige Schlüssel wurden als widerrufen oder abgelaufen angezeigt
|
||||
* Akzeptiert keine Signaturen abgelaufener oder widerrufener Unterschlüssel
|
||||
* Keybase.io-Unterstützung in der erweiterten Ansicht
|
||||
* Möglichkeit, alle Schlüssel auf einmal zu aktualisieren
|
||||
|
||||
|
||||
## 3.1.2
|
||||
|
||||
* Fix key export to files (now for real)
|
||||
* Behoben: Schlüsselexport zu Datei (jetzt wirklich)
|
||||
|
||||
|
||||
## 3.1.1
|
||||
|
||||
* Fix key export to files (they were written partially)
|
||||
* Schlüsselexport zu Datei repariert (sie wurden nur teilweise geschrieben)
|
||||
* Absturz unter Android 2.3 behoben
|
||||
|
||||
|
||||
@@ -30,47 +39,47 @@
|
||||
|
||||
* Absturz unter Android 5 behoben
|
||||
* Neuer Beglaubigungsbildschirm
|
||||
* Secure Exchange directly from key list (SafeSlinger library)
|
||||
* Sicherer Austausch direkt aus der Schlüsselliste (SafeSlinger-Bibliothek)
|
||||
* Neuer Programmablauf für QR-Codes
|
||||
* Redesigned decrypt screen
|
||||
* Neugestalteter Entschlüsselungsbildschirm
|
||||
* Verwendung neuer Symbole und Farben
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Behoben: Import geheimer Schlüssel aus Symantec Encryption Desktop
|
||||
* Experimentelle YubiKey-Unterstützung: Unterschlüssel-IDs werden jetzt richtig geprüft
|
||||
|
||||
|
||||
## 3.0.1
|
||||
|
||||
* Better handling of large key imports
|
||||
* Improved subkey selection
|
||||
* Bessere Verarbeitung von großen Schlüsselimporten
|
||||
* Verbesserte Unterschlüsselauswahl
|
||||
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
* Honor and display key authenticate flags
|
||||
* User interface to generate custom keys
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Kompatible, installierbare Apps in der App-Liste vorschlagen
|
||||
* Neues Design für Entschlüsselungsbildschirme
|
||||
* Viele Fehler beim Schlüsselimport behoben, auch bei gekürzten Schlüsseln
|
||||
* Schlüsselauthentifikations-Attribute berücksichtigen und anzeigen
|
||||
* Benutzeroberfläche zum Erzeugen benutzerdefinierter Schlüssel
|
||||
* Benutzer-ID-Widerrufszertifikate repariert
|
||||
* Neue Cloud-Suche (sucht über traditionelle Schlüsselserver und über keybase.io)
|
||||
* Unterstützung für das Kürzen von Schlüsseln innerhalb von OpenKeychain
|
||||
* Experimentelle YubiKey-Unterstützung: Unterstützung für Signaturerzeugung und Entschlüsselung
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Repariere Schlüssel, die in 2.9.1 beschädigt wurden
|
||||
* Experimentelle YubiKey-Unterstützung: Entschlüsselung funktioniert nun via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
|
||||
* Split encrypt screen into two
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* Verschlüsselungsbildschirm in zwei Bildschirme aufgeteilt
|
||||
* Behoben: Fehler bei Handhabung von Schlüsselattributen (unterstützt nun Schlüssel aus Mailvelope 0.7)
|
||||
* Handhabung von Passwörtern verbessert
|
||||
* Schlüsselaustausch mit SafeSlinger
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Nutzung gekürzter Schlüssel repariert
|
||||
* Standardmäßig SHA256 aufgrund von Kompatibilität
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
* OpenPGP API now handles revoked/expired keys and returns all user ids
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimentelle ECC-Unterstützung
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
@@ -203,7 +212,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
|
||||
## 1.0.8
|
||||
|
||||
* Grundlegende Schlüsselserverunterstützung
|
||||
* App2sd
|
||||
* App2SD
|
||||
* More choices for passphrase cache: 1, 2, 4, 8, hours
|
||||
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
|
||||
* Fehlerbehebungen
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
## Wie kann ich OpenKeychain in K-9 Mail nutzen?
|
||||
Um OpenKeychain mit K-9 Mail zu nutzen, bitte folgenden Schritten folgen:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Klick auf "OpenPGP Provider" und OpenKeychain in der Liste auswählen.
|
||||
1. Öffne K-9 Mail und drücke lange auf den Account, mit dem du OpenKeychain nutzen willst.
|
||||
2. Wähle "Kontoeinstellungen", blättere ganz nach unten und klicke auf "Kryptographie".
|
||||
3. Drücke auf "OpenPGP-Provider" und OpenKeychain in der Liste auswählen.
|
||||
|
||||
## Ich habe einen Fehler in OpenKeychail gefunden!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
Bitte melde den Fehler mithilfe des [Fehlertrackers von OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Unterstützen
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
Wenn du uns bei der Entwicklung von OpenKeychain, z.B. durch das Beisteuern von Code, helfen willst, [schaue dir unsere kurze Anleitung auf GitHub an](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Übersetzungen
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
Hilf mit, OpenKeychain zu übersetzen! Jeder kann mitmachen, [besuche OpenKeychain auf Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
Licencia: GPLv3+
|
||||
|
||||
## Desarrolladores
|
||||
## Desarrolladores principales
|
||||
* Dominik Schürmann (Mantenedor)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contribuidores
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ Licencia: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (desarrollador APG)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Librerías
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (Licencia MIT X11)
|
||||
@@ -38,9 +57,9 @@ Licencia: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Licencia Apache v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Licencia Apache v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Licencia Apache v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Diseño estilo Material)</a> (Licencia Apache v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Licencia Apache v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Licencia Apache v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (Licencia MIT)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Licencia Apache v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Licencia Apache v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Licencia Apache v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Licencia Apache v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTA: ¡Por favor ponga cada frase en su propia línea, Transifex pone cada línea en su propio campo de traducción!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Primera versión con soporte para YubiKey completo disponible desde la interfaz de usuario: Editar claves, ligar YubiKey a claves...
|
||||
* Material design (estilo)
|
||||
* Integración de QR Scanner (se requieren nuevos permisos)
|
||||
* Integración de Escaneado de Código QR (se requieren nuevos permisos)
|
||||
* Asistente de creación de clave mejorado
|
||||
* Repara contactos perdidos después de la sincronización
|
||||
* Requiere Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Reparación: Algunas claves válidas se mostraron revocadas o caducadas
|
||||
* No acepte algo firmado por subclaves caducadas o revocadas
|
||||
* Soporte para Keybase.io en la vista avanzada
|
||||
* Método para actualizar todas las claves a la vez
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Pantalla de descifrado rediseñada
|
||||
* Nuevo uso y colores del icono
|
||||
* Repara la importación de claves secretas (privadas) desde Symantec Encryption Desktop
|
||||
* Las identificaciones de subclaves en Yubikeys ahora se comprueban correctamente
|
||||
* Soporte experimental para YubiKey: Las identificaciones (IDs) de subclaves ahora se comprueban correctamente.
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* ¡Soporte completo para generación de firma y descifrado de Yubikey!
|
||||
* Propone aplicaciones instalables compatibles en la lista de aplicaciones
|
||||
* Nuevo diseño para pantallas de descifrado
|
||||
* Muchas reparaciones para la importación de claves, también repara claves desnudas
|
||||
@@ -55,12 +63,13 @@
|
||||
* Repara certificados de revocación de identificación de usuario
|
||||
* Nueva búsqueda en la nube (busca sobre servidores de claves tradicionales y keybase.io)
|
||||
* Soporte para desvestir claves dentro de OpenKeychain
|
||||
* Soporte experimental para YubiKey: Soporte para generación de firma y descifrado
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Repara claves rotas en la versión 2.9.1
|
||||
* El descifrado de Yubikey ahora funciona vía API
|
||||
* Soporte experimental para YubiKey: El descifrado ahora funciona vía API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Repara el manejo de los indicativos de claves (ahora soporta claves de Mailvelope 0.7)
|
||||
* Manejo de frase-contraseña mejorado
|
||||
* Compartición de claves vía SafeSlinger
|
||||
* Yubikey: Preferencia para permitir otros PINs, actualmente sólo funciona firmando mediante la API de OpenPGP, no dentro de OpenKeychain
|
||||
* Soporte experimental para YubiKey: Preferencia para permitir otros PINs, actualmente sólo funciona firmando vía API OpenPGP, no desde dentro de OpenKeychain
|
||||
* Repara el uso de claves desnudas
|
||||
* SHA256 por defecto para compatibilidad
|
||||
* La API de Intent ha cambiado, vea https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Repara caídas introducidas en la versión 2.8
|
||||
* Soporte para ECC (criptografía de curva elíptica) experimental
|
||||
* Soporte experimental para Yubikey (sólo-firmante con claves importadas)
|
||||
* Soporte experimental para YubiKey: Firmando sólo con claves importadas
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (OHARRA: Meseez jarri esaldi bakoitza bere lerroan, Transifex-ek lerroak bere itzulpen eremuan jartzen ditu!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
|
||||
[OpenKeychain](http://www.openkeychain.org) Android-rako OpenPGP egokitzapen bat da.
|
||||
|
||||
License: GPLv3+
|
||||
Baimena: GPLv3+
|
||||
|
||||
## Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
## Garatzaile Nagusiak
|
||||
* Dominik Schürmann (Mantentzaileak)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Laguntzaileak
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,32 +19,47 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG garatzailea)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
|
||||
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
|
||||
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
|
||||
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
## Liburutegiak
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 Baimena)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT Baimena)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache Baimena v2)
|
||||
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache Baimena v2)
|
||||
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache Baimena v2)
|
||||
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache Baimena v2)
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache Baimena v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache Baimena v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache Baimena v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache Baimena v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT Baimena)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache Baimena v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache Baimena v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache Baimena v2)
|
||||
@@ -1,24 +1,24 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (OHARRA: Meseez jarri esaldi bakoitza bere lerroan, Transifex-ek lerroak bere itzulpen eremuan jartzen ditu!)
|
||||
|
||||
## Key Confirmation
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
## Giltza Baieztapena
|
||||
Baieztapenik gabe, ezin zara zihur egon giltza bat egitan norbanako zehatz batena den.
|
||||
Giltza bat baieztatzeko bide arruntena QR Kodea eskaneatzea edo hura NFC bidez trukatzea da.
|
||||
Giltzak bi norbanako baino gehiagoren artean baieztatzeko, zure giltzentzat eskuragarrai dagoen giltza trukea metodoa erabiltzea gomendatzen dugu.
|
||||
|
||||
## Key Status
|
||||
## Giltza Egoera
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
Baieztatuta: Giltza hau jadanik baieztatuta duzu, adib. QR Kodea eskaneatuz.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
Baieztatugabe: Giltza hau oraindik ez da baieztatu. Ezin zara zihur egon giltza egitan norbanako zehatz batena den.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
Iraungitua: Giltza hau aurrerantzean ez da baliozkoa. Jabeak bakarrik luzatu dezake bere baliozkotasuna.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
Ukatua: Giltza hau aurrerantzean ez da baliozkoa. Bere jabeak ukatua izan da.
|
||||
|
||||
## Advanced Information
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
## Argibide Aurreratuak
|
||||
OpenKeychain-en "giltza baieztapen" bat OpenPGP estandarraren araberako egiaztagiri bat sortuz egokitzen da.
|
||||
Egiaztapen hau da ["egiaztapen generikoa (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) estandarrean azaltzen duena honek:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
|
||||
@@ -1,66 +1,75 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (OHARRA: Meseez jarri esaldi bakoitza bere lerroan, Transifex-ek lerroak bere itzulpen eremuan jartzen ditu!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
* Redesigned key screen
|
||||
* Simplify crypto preferences, better selection of secure ciphers
|
||||
* API: Detached signatures, free selection of signing key,...
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
Material diseinua
|
||||
* QR Kode eskaneatzea baterapena (Baimen berriak beharrezkoak)
|
||||
* Hobetuta giltza sortze laguntzailea
|
||||
* Zuzenduta harreman galera aldiberetu ondoren
|
||||
* Android 4 behar du
|
||||
* Giltza ikusleihoaren berdiseinua
|
||||
* Kripto hobespenen arruntzea, zifraketa seguruen hautaketa hobea
|
||||
* API: Sinadurak deserantsita, giltza sinatuaren hautaketa askea,...
|
||||
* Zuzenduta: Zenbait baliozko giltza ukatuta edo iraungituta erakusten dira
|
||||
* Ez da sinadurarik onartzen iraungitutako edo ukatutako azpigiltzetatik
|
||||
* Keybase.io sostengua ikuspegi aurreratuan
|
||||
* Giltza guztiak batera eguneratzeko metodoa
|
||||
|
||||
|
||||
## 3.1.2
|
||||
|
||||
* Fix key export to files (now for real)
|
||||
* Zuzenduta esportatu giltzak agirietara (orain egitan)
|
||||
|
||||
|
||||
## 3.1.1
|
||||
|
||||
* Fix key export to files (they were written partially)
|
||||
* Fix crash on Android 2.3
|
||||
* Zuzenduta esportatu giltzak agirietara (partzialki idatzita)
|
||||
* Zuzenduta kraskatzea Android 2.3-an
|
||||
|
||||
|
||||
## 3.1
|
||||
|
||||
* Fix crash on Android 5
|
||||
* New certify screen
|
||||
* Secure Exchange directly from key list (SafeSlinger library)
|
||||
* New QR Code program flow
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Zuzenduta kraskatzea Android 5-ean
|
||||
* Egiaztagiri ikusleiho berria
|
||||
* Trukaketa Segurua zuzenean giltza zerrendatik (SafeSlinger liburutegia)
|
||||
* QR Kode programa berria
|
||||
* Dekriptaketa ikusleihoaren berdiseinua
|
||||
* Ikur berria eta margoak
|
||||
* Zuzenduta inportatu giltza sekretua Symantec Enkriptaketa Mahaigainetik
|
||||
* YubiKey sostengu esperimentala: Azpigiltza ID-ak orain zuzen egiaztatzen dira
|
||||
|
||||
|
||||
## 3.0.1
|
||||
|
||||
* Better handling of large key imports
|
||||
* Improved subkey selection
|
||||
* Kudeaketa hobea giltza inportatze handietarako
|
||||
* Hobetuta azpigiltza hautapena
|
||||
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
* Diseinu berria dekriptaketa ikusleihoentzat
|
||||
* Zuzenketa ugari giltza inportatzean, zuzenduta baita ere giltzen zuriketa
|
||||
* Honor and display key authenticate flags
|
||||
* User interface to generate custom keys
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Erabiltzaile interfazea norbere giltzak sortzeko
|
||||
* Zuzenduta erabiltzaile id ukatze egiaztagiriak
|
||||
* Hodei bilaketa berria (ohiko giltza-zerbitzari eta keybase.io gain bilatzen da)
|
||||
* Sostengua giltza zuriketarako OpenKeychain barne
|
||||
* YubiKey sostengu esperimentala: Sostengua sinadura sortze eta dekriptaketarako
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (OHARRA: Meseez jarri esaldi bakoitza bere lerroan, Transifex-ek lerroak bere itzulpen eremuan jartzen ditu!)
|
||||
|
||||
## How do I activate OpenKeychain in K-9 Mail?
|
||||
To use OpenKeychain with K-9 Mail, you want to follow these steps:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
|
||||
## Nola gaitu dezaket OpenKeychain K-9 Mail-en?
|
||||
OpenKeychain K-9 Mail-ekin erabiltzeko, urrats hauek jarraitu behar dituzu:
|
||||
1. Ireki K-9 Mail eta egin ikutu-luzea OpenKeychain erabiltzea nahi duzun kontuan.
|
||||
2. Hautatu "Kontuaren ezarpenak", irristatu beheren eta klikatu "Kriptografia".
|
||||
3. Klikatu "OpenPGP Hornitzailea" eta hautatu OpenKeychain zerrendatik.
|
||||
|
||||
## I found a bug in OpenKeychain!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
## Akats bat aurkitu dut OpenKeychain-en!
|
||||
Mesedez jakinarazi akatsa erabiliz [OpenKeychain akats aztarnaria](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Contribute
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
## Lagundu
|
||||
OpenKeychain garatzen laguntzea nahi badiguzu kode ekarpenak eginez [jarraitu gure gida txikia Github-en](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Translations
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
## Itzulpenak
|
||||
Lagundu OpenKeychain itzultzen! Edonork eskuhartu dezake hemen [OpenKeychain Transifex-en](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
Licence : GPLv3+
|
||||
|
||||
## Développeurs
|
||||
## Développeurs principaux
|
||||
* Dominik Schürmann (mainteneur)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributeurs
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ Licence : GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* « mar-v-in »
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* « Senecaso »
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (développeur APG)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Bibliothèques
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (Licence MIT X11)
|
||||
@@ -38,9 +57,9 @@ Licence : GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Licence Apache v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Licence Apache v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Licence Apache v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Conception matérielle)</a> (Licence Apache v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Licence Apache v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Licence Apache v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (Licence MIT)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Licence Apache v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Licence Apache v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Licence Apache v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Licence Apache v2)
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
## Confirmation de clef
|
||||
Sans confirmation, vous ne pouvez pas être certain que la clef appartient à une personne déterminée.
|
||||
La façon la plus simple de confirmer une clef est en balayant le code QR ou en l'échangeant par NFC.
|
||||
La façon la plus simple de confirmer une clef est en lisant le code QR ou en l'échangeant par NFC.
|
||||
Pour confirmer des clefs entre plus de deux personnes, nous suggérons d'utiliser la méthode d'échange de clef proposée pour vos clefs.
|
||||
|
||||
## État de la clef
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmée : vous avez déjà confirmé cette clef, p. ex. en balayant le code QR.
|
||||
Confirmée : vous avez déjà confirmé cette clef, p. ex. en lisant le code QR.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Non confirmée : cette clef n'a pas encore été confirmée. Vous ne pouvez pas être certain que la clef appartient à une personne déterminée.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
[//] : # (NOTE : veuillez mettre chaque phrase sur sa propre ligne. Transifex met chaque ligne dans son propre champ de traduction !)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Première version avec prise en charge complète de la clef Yubi, proposée dans l'interface utilisateur : modifier les clefs, relier la clef Yubi au clefs...
|
||||
* Conception matérielle
|
||||
* Intégration du lecteur QR (nouvelles permissions exigées)
|
||||
* Intégration de la lecture de code QR (nouvelles permissions exigées)
|
||||
* Amélioration de l'assistant de création de clef
|
||||
* Correctif - Contacts manquants après la synchro
|
||||
* Android 4 exigé
|
||||
@@ -13,6 +21,7 @@
|
||||
* Correctif - Certaines clefs valides apparaissaient comme révoquées ou expirées
|
||||
* Ne pas accepter de signatures par des sous-clefs expirées ou révoquées
|
||||
* Prise en charge de keybase.io dans la vue avancée
|
||||
* Méthode pour mettre toutes les clefs à jour en même temps
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Écran de déchiffrement redessiné
|
||||
* Nouveaux agencement et couleurs d'icônes
|
||||
* Importation des clefs secrètes corrigée de Symantec Encryption Desktop
|
||||
* Les ID de sous-clefs des Yubikeys sont maintenant vérifiés correctement
|
||||
* Prise en charge expérimentale des clefs Yubi : les ID de sous-clefs sont maintenant vérifiés correctement
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Prise en charge complète de la génération de signature par Yubikey et de leur déchiffrement !
|
||||
* Des applis compatibles installables sont proposées dans la liste des applis
|
||||
* Nouvelle conception pour les écrans de déchiffrement
|
||||
* Nombreux correctifs d'importation des clefs, corrigent aussi les clefs dépouillées
|
||||
@@ -55,12 +63,13 @@
|
||||
* Corrigé - Certificats de révocation des ID utilisateurs
|
||||
* Nouvelle recherche nuagique (dans les serveurs traditionnels et dans keybase.io)
|
||||
* Prise en charge du dépouillement des clefs dans OpenKeychain
|
||||
* Prise en charge expérimentale des clefs Yubi : prise en charge de la génération de signature et le déchiffrement
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Correctif - Clefs brisées dans 2.9.1
|
||||
* Le déchiffrement des Yukukeys par l'API fonctionne maintenant
|
||||
* Prise en charge expérimentale des clefs Yubi : le déchiffrement fonctionne maintenant avec l'API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Correctif - Gestion des drapeaux de clefs (prend maintenant en charge les clefs Mailvelope 0.7)
|
||||
* Gestion des phrases de passe améliorée
|
||||
* Partage de clefs par SafeSlinger
|
||||
* Yubikey : préférence pour permette d'autre NIP, seule la signature par l'API OpenPGP fonctionne présentement, mais pas à l'intérieur d'OpenKeychain
|
||||
* Prise en charge expérimentale des clefs Yubi : préférence pour permettre d'autres NIP, seule la signature par l'API OpenPGP fonctionne actuellement, mais pas dans OpenKeychain
|
||||
* Correctif - Utilisation de clefs dépouillées
|
||||
* SHA256 par défaut pour la compatibilité
|
||||
* L'API des intentions a changé, voir https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Correction des plantages présents dans v2.8
|
||||
* Prise en charge expérimentale CCE
|
||||
* Prise en charge expérimentale de Yubikey (signature seulement avec les clefs importées)
|
||||
* Prise en charge expérimentale des clefs Yubi : signature seulement avec les clefs importées
|
||||
|
||||
|
||||
## 2.8
|
||||
@@ -180,7 +189,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
|
||||
|
||||
## 2.1.1
|
||||
|
||||
* Mise à jour de l'API, préparation à l'intégration à K-9 Mail
|
||||
* Mise à jour de l'API, préparation à l'intégration à Courriel K-9 Mail
|
||||
|
||||
|
||||
## 2.1
|
||||
@@ -251,7 +260,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
|
||||
* Listes de clefs filtrables
|
||||
* Présélection plus intelligente des clefs de chiffrement
|
||||
* Nouvelle gestion des intentions pour VIEW et SEND, permet le chiffrement/déchiffrement des fichiers du gestionnaires de fichiers
|
||||
* Correctifs et fonctions additionnelles (présélection des clefs) pour K-9-Mail, nouvelle version bêta proposée
|
||||
* Correctifs et fonctions additionnelles (présélection des clefs) pour Courriel K-9-Mail, nouvelle version bêta proposée
|
||||
|
||||
|
||||
## 1.0.1
|
||||
@@ -261,7 +270,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
|
||||
|
||||
## 1.0.0
|
||||
|
||||
* Intégration à K-9 Mail, APG prenant en charge la version bêta de K-9 Mail
|
||||
* Intégration à K-9 Mail, APG prenant en charge la version bêta de Courriel K-9 Mail
|
||||
* Prise en charge de plus de gestionnaires de fichiers (incluant ASTRO)
|
||||
* Traduction slovène
|
||||
* Nouvelle base de données, bien plus rapide, utilisation de la mémoire moindre
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[//] : # (NOTE : veuillez mettre chaque phrase dans sa propre ligne. Transifex met chaque ligne dans son propre champ de traduction !)
|
||||
|
||||
## Comment puis-je activer OpenKeychain dans K-9 Mail ?
|
||||
Pour utiliser OpenKeychain avec K-9 Mail, vous devez suivre ces étapes :
|
||||
1. Ouvrez K-9 Mail et appuyez longuement sur le compte avec lequel vous voulez utiliser OpenKeychain.
|
||||
## Comment puis-je activer OpenKeychain dans Courriel K-9 Mail ?
|
||||
Pour utiliser OpenKeychain avec Courriel K-9 Mail, vous devez suivre ces étapes :
|
||||
1. Ouvrez Courriel K-9 Mail et appuyez longuement sur le compte avec lequel vous voulez utiliser OpenKeychain.
|
||||
2. Sélectionnez « Paramètres du compte », faite défiler vers le bas et cliquez sur « Cryptographie ».
|
||||
3. Cliquez sur « Fournisseur OpenPGP » et sélectionnez OpenKeychain dans la liste.
|
||||
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTA: Si prega di mettere ogni frase in una propria linea, Transifex mette ogni riga nel proprio campo di traduzione!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
|
||||
[OpenKeychain](http://www.openkeychain.org) e un impelementazione OpenPGP per Android.
|
||||
|
||||
License: GPLv3+
|
||||
Licenza: GPLv3+
|
||||
|
||||
## Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
## Sviluppatori principali
|
||||
* Dominik Schürmann (Manutentore)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Collaboratori
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,20 +19,35 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (Sviluppatore APG)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
## Librerie
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,28 +1,28 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTA: Si prega di mettere ogni frase in una propria linea, Transifex mette ogni riga nel proprio campo di traduzione!)
|
||||
|
||||
## Key Confirmation
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
## Conferma chiave
|
||||
Senza conferma, non puoi essere sicuro la chiave veramente corrisponde a una persona specifica.
|
||||
Il modo più semplice per confermare una chiave è la scansione del codice QR o scambiarla via NFC.
|
||||
Per confermare le chiavi tra più di due persone, si consiglia di utilizzare il metodo di scambio di chiavi a disposizione per le vostre chiavi.
|
||||
|
||||
## Key Status
|
||||
## Stato chiave
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
Confermato: Hai già confermato questa chiave, ad esempio, attraverso la scansione del codice QR.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
Non confermato: Questa chiave non è ancora stata confermata. Non si può essere sicuri se la chiave corrisponde davvero a una persona specifica.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
Scaduta: Questa chiave non è più valida. Solo il proprietario può estendere la sua validità.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
Revoca: Questa chiave non è più valida. È stata revocata dal suo proprietario.
|
||||
|
||||
## Advanced Information
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
## Informazioni avanzate
|
||||
Una "conferma chiave" in OpenKeychain è attuato mediante la creazione di una certificazione secondo lo standard OpenPGP.
|
||||
Questa certificazione è un ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) indicata nella norma per:
|
||||
"L'emittente di tale certificazione non va alcun particolare asserzione da quanto accurato il certificatore ha verificato che il proprietario della chiave è infatti la persona descritta dal ID utente."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
|
||||
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
|
||||
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
|
||||
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.
|
||||
Tradizionalmente, certificazioni (anche con livelli di certificazione più elevati, come "certificazioni positivi" (0x13)) sono organizzate su OpenPGP nel web di confidenza ("Web of trust").
|
||||
Il nostro modello di conferma chiave è un concetto molto più semplice per evitare problemi di usabilità comuni relativi a questo Web of Trust.
|
||||
Assumiamo che le chiavi vengono verificati solo fino ad un certo grado che è ancora abbastanza utilizzabile da eseguire "in movimento".
|
||||
Inoltre, non implementiamo (potenzialmente transitive) firme fiduciarie o un database ownertrust come in GnuPG.
|
||||
Inoltre, chiavi che contengono almeno un ID utente certificata da una chiave di fiducia saranno contrassegnati come "confermato" negli elenchi principali.
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTA: Si prega di mettere ogni frase in una propria linea, Transifex mette ogni riga nel proprio campo di traduzione!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTA: Si prega di mettere ogni frase in una propria linea, Transifex mette ogni riga nel proprio campo di traduzione!)
|
||||
|
||||
## How do I activate OpenKeychain in K-9 Mail?
|
||||
To use OpenKeychain with K-9 Mail, you want to follow these steps:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
|
||||
## Come attivare OpenKeychain in K-9 Mail?
|
||||
Per usare OpenKeychain con K-9 Mail, vuoi segire questi passi:
|
||||
1. Avia K-9 Mail e premi lungo sul account che vuoi usare con OpenKeychain.
|
||||
2. Seleziona "Impostazioni account", scorri verso il basso e clicca "Crittografia".
|
||||
3. Clicca su "OpenPGP Provider" e seleziona OpenKeychain dalla lista.
|
||||
|
||||
## I found a bug in OpenKeychain!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
## Ho trovato un bug in OpenKeychain!
|
||||
Si prega di segnalare dei bug utilizzando [issue tracker di OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Contribute
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
## Contribuire
|
||||
Se vuoi aiutarci a sviluppare OpenKeychain contribuendo codice [segui la nostra piccola guida su Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Translations
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
## Traduzioni
|
||||
Aiuta a tradurre OpenKeychain! Tutti possono partecipare su [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
ライセンス: GPLv3以降
|
||||
|
||||
## Developers## 開発者
|
||||
## メイン開発者
|
||||
* Dominik Schürmann (メンテナ)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## 貢献者
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG 開発者)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## ライブラリ
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -39,8 +58,8 @@
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -19,10 +19,10 @@
|
||||
## 詳細情報
|
||||
OpenKeychainでの"鍵の検証"はOpenPGP標準に準拠した証明を生成する実装がなされています。
|
||||
この証明は ["汎用証明 (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) として標準に以下として記述されています:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
"この証明書の発行者は、認証者は、鍵の所有者が実際にユーザIDによって記述の人であることを確認したこの証明書のように、任意の特定の主張を行いません。"
|
||||
|
||||
歴史的に、証明(またより高いレベルの証明、"肯定的な証明" (0x13)) は OpenPGPによるWeb of Trustとして組織化されます。
|
||||
われわれの鍵の証明モデルはとてもシンプルなコンセプトによって関連する一般的なユーザビリティの問題を回避する概念です。
|
||||
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
|
||||
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
|
||||
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.
|
||||
私たちは、鍵が唯一の "外出先で"まだ実行されるのに十分な使用可能なある程度検証されることを想定しています。
|
||||
しかし私達は(潜在的推移則での)信頼署名やGnuPG式の所有信頼データベースの実装はしません。
|
||||
さらに、信頼できるキーで証明された少なくとも1つのユーザIDが含まれるキーは、キーのリストに「確認」としてマークされます。
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* 完全なYubiKeyサポートがユーザーインタフェースから利用できる最初のバージョン: 鍵の編集、YubiKeyと鍵の紐付け、...
|
||||
* マテリアルデザイン
|
||||
* QRスキャナの統合 (新しいパーミッションを必要とします)
|
||||
* QRコードのスキャンの統合 (新しいパーミッションを必要とします)
|
||||
* 鍵生成ウィザードの改善
|
||||
* 同期後に連絡先を見失う問題の修正
|
||||
* Android 4を必要とします
|
||||
@@ -13,6 +21,7 @@
|
||||
* 修正: いくつかの正しい鍵が破棄もしくは期限切れとして表示される
|
||||
* 副鍵が期限切れもしくは破棄されている場合に署名を受け入れない
|
||||
* 拡張ビューでのKeybase.ioのサポート
|
||||
* すべての鍵を一度にアップデートするメソッド
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* 復号化画面の再デザイン
|
||||
* 新しいアイコン利用とカラー
|
||||
* Symantec Encryption Desktopから秘密鍵をインポート時の問題修正
|
||||
* Yubikeyでの副鍵IDを正くチェックするようになりました
|
||||
* 実験的なYubiKeyサポート: Yubikeyでの副鍵IDを正くチェックするようになりました
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Yubikeyでの署名生成と復号化のフルサポート
|
||||
* インストールできるAPIの互換性のあるアプリをアプリ内リストで提示します
|
||||
* 復号化画面を新しいデザインに
|
||||
* 鍵のインポートで沢山の修正、また鍵のストリップでも修正
|
||||
@@ -55,12 +63,13 @@
|
||||
* ユーザーID破棄証明の修正
|
||||
* 新しいクラウド検索 (古典的な keyserverと keybase.io から検索します)
|
||||
* OpenKeychain内で鍵をストリップするのをサポートしました
|
||||
* 実験的なYubiKeyサポート: Yubikeyでの署名生成と復号化のフルサポート
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* 2.9.1での鍵破壊問題修正
|
||||
* API経由でYubikeyの復号処理が動くようになった
|
||||
* 実験的なYubiKeyサポート: API経由でYubikeyの復号処理が動くようになった
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* 鍵のフラグ管理を修正 (現在Mailvelope 0.7 鍵をサポート)
|
||||
* パスフレーズの取り回しを改善
|
||||
* SafeSlingerでの鍵の共有
|
||||
* Yubikey: 設定で他のPINを受け付け、現在OpenPGP API経由での署名しか動きません、OpenKeychainの内部ではないため
|
||||
* 実験的なYubiKeyサポート: 設定で他のPINを受け付け、現在OpenPGP API経由での署名しか動きません、OpenKeychainの内部ではないため
|
||||
* ストリップした鍵の利用法を修正
|
||||
* 互換性のためデフォルトをSHA256に
|
||||
* インテント API を変更しました、以下参照 https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* v2.8 から発生したクラッシュ問題をFix
|
||||
* 実験的にECCをサポート
|
||||
* 実験的にYubikeyをサポート(インポート済みの鍵での署名のみ)
|
||||
* 実験的なYubiKeyサポート: インポート済みの鍵での署名のみ
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
65
OpenKeychain/src/main/res/raw-kn/help_about.md
Normal file
65
OpenKeychain/src/main/res/raw-kn/help_about.md
Normal file
@@ -0,0 +1,65 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
* Bahtiar 'kalkin' Gadimov
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
|
||||
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
|
||||
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
|
||||
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
28
OpenKeychain/src/main/res/raw-kn/help_certification.md
Normal file
28
OpenKeychain/src/main/res/raw-kn/help_certification.md
Normal file
@@ -0,0 +1,28 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
## Key Confirmation
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
|
||||
## Key Status
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
|
||||
## Advanced Information
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
|
||||
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
|
||||
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
|
||||
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.
|
||||
278
OpenKeychain/src/main/res/raw-kn/help_changelog.md
Normal file
278
OpenKeychain/src/main/res/raw-kn/help_changelog.md
Normal file
@@ -0,0 +1,278 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
* Redesigned key screen
|
||||
* Simplify crypto preferences, better selection of secure ciphers
|
||||
* API: Detached signatures, free selection of signing key,...
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
|
||||
* Fix key export to files (now for real)
|
||||
|
||||
|
||||
## 3.1.1
|
||||
|
||||
* Fix key export to files (they were written partially)
|
||||
* Fix crash on Android 2.3
|
||||
|
||||
|
||||
## 3.1
|
||||
|
||||
* Fix crash on Android 5
|
||||
* New certify screen
|
||||
* Secure Exchange directly from key list (SafeSlinger library)
|
||||
* New QR Code program flow
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
|
||||
* Better handling of large key imports
|
||||
* Improved subkey selection
|
||||
|
||||
|
||||
## 3.0
|
||||
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
* Honor and display key authenticate flags
|
||||
* User interface to generate custom keys
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
|
||||
* Split encrypt screen into two
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
* OpenPGP API now handles revoked/expired keys and returns all user ids
|
||||
|
||||
|
||||
## 2.9
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
* So many bugs have been fixed in this release that we focus on the main new features
|
||||
* Key edit: awesome new design, key revocation
|
||||
* Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records
|
||||
* New first time screen
|
||||
* 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
|
||||
* New icons to show status of key (by Brennan Novak)
|
||||
* Important bug fix: Importing of large key collections from a file is now possible
|
||||
* Notification showing cached passphrases
|
||||
* Keys are connected to Android's contacts
|
||||
|
||||
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
|
||||
|
||||
## 2.7
|
||||
|
||||
* Purple! (Dominik, Vincent)
|
||||
* New key view design (Dominik, Vincent)
|
||||
* New flat Android buttons (Dominik, Vincent)
|
||||
* API fixes (Dominik)
|
||||
* Keybase.io import (Tim Bray)
|
||||
|
||||
|
||||
## 2.6.1
|
||||
|
||||
* Some fixes for regression bugs
|
||||
|
||||
|
||||
## 2.6
|
||||
|
||||
* Key certifications (thanks to Vincent Breitmoser)
|
||||
* Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
|
||||
* New design for signature verification
|
||||
* Custom key length (thanks to Greg Witczak)
|
||||
* Fix share-functionality from other apps
|
||||
|
||||
|
||||
## 2.5
|
||||
|
||||
* Fix decryption of symmetric OpenPGP messages/files
|
||||
* Refactored key edit screen (thanks to Ash Hughes)
|
||||
* New modern design for encrypt/decrypt screens
|
||||
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
|
||||
|
||||
|
||||
## 2.4
|
||||
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.
|
||||
|
||||
* New unified key list
|
||||
* Colorized key fingerprint
|
||||
* Support for keyserver ports
|
||||
* Deactivate possibility to generate weak keys
|
||||
* Much more internal work on the API
|
||||
* Certify user ids
|
||||
* Keyserver query based on machine-readable output
|
||||
* Lock navigation drawer on tablets
|
||||
* Suggestions for emails on creation of keys
|
||||
* Search in public key lists
|
||||
* And much more improvements and fixes…
|
||||
|
||||
|
||||
## 2.3.1
|
||||
|
||||
* Hotfix for crash when upgrading from old versions
|
||||
|
||||
|
||||
## 2.3
|
||||
|
||||
* Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
|
||||
* Fix setting expiry dates on keys (thanks to Ash Hughes)
|
||||
* More internal fixes when editing keys (thanks to Ash Hughes)
|
||||
* Querying keyservers directly from the import screen
|
||||
* Fix layout and dialog style on Android 2.2-3.0
|
||||
* Fix crash on keys with empty user ids
|
||||
* Fix crash and empty lists when coming back from signing screen
|
||||
* Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
|
||||
* Fix upload of key from signing screen
|
||||
|
||||
|
||||
## 2.2
|
||||
|
||||
* New design with navigation drawer
|
||||
* New public key list design
|
||||
* New public key view
|
||||
* Bug fixes for importing of keys
|
||||
* Key cross-certification (thanks to Ash Hughes)
|
||||
* Handle UTF-8 passwords properly (thanks to Ash Hughes)
|
||||
* First version with new languages (thanks to the contributors on Transifex)
|
||||
* Sharing of keys via QR Codes fixed and improved
|
||||
* Package signature verification for API
|
||||
|
||||
|
||||
## 2.1.1
|
||||
|
||||
* API Updates, preparation for K-9 Mail integration
|
||||
|
||||
|
||||
## 2.1
|
||||
|
||||
* Lots of bug fixes
|
||||
* New API for developers
|
||||
* PRNG bug fix by Google
|
||||
|
||||
|
||||
## 2.0
|
||||
|
||||
* Complete redesign
|
||||
* Share public keys via QR codes, NFC beam
|
||||
* Sign keys
|
||||
* Upload keys to server
|
||||
* Fixes import issues
|
||||
* New AIDL API
|
||||
|
||||
|
||||
## 1.0.8
|
||||
|
||||
* Basic keyserver support
|
||||
* App2sd
|
||||
* More choices for passphrase cache: 1, 2, 4, 8, hours
|
||||
* Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
|
||||
* Bugfixes
|
||||
* Optimizations
|
||||
|
||||
|
||||
## 1.0.7
|
||||
|
||||
* Fixed problem with signature verification of texts with trailing newline
|
||||
* More options for passphrase cache time to live (20, 40, 60 mins)
|
||||
|
||||
|
||||
## 1.0.6
|
||||
|
||||
* Account adding crash on Froyo fixed
|
||||
* Secure file deletion
|
||||
* Option to delete key file after import
|
||||
* Stream encryption/decryption (gallery, etc.)
|
||||
* New options (language, force v3 signatures)
|
||||
* Interface changes
|
||||
* Bugfixes
|
||||
|
||||
|
||||
## 1.0.5
|
||||
|
||||
* German and Italian translation
|
||||
* Much smaller package, due to reduced BC sources
|
||||
* New preferences GUI
|
||||
* Layout adjustment for localization
|
||||
* Signature bugfix
|
||||
|
||||
|
||||
## 1.0.4
|
||||
|
||||
* Fixed another crash caused by some SDK bug with query builder
|
||||
|
||||
|
||||
## 1.0.3
|
||||
|
||||
* Fixed crashes during encryption/signing and possibly key export
|
||||
|
||||
|
||||
## 1.0.2
|
||||
|
||||
* Filterable key lists
|
||||
* Smarter pre-selection of encryption keys
|
||||
* New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
|
||||
* Fixes and additional features (key preselection) for K-9 Mail, new beta build available
|
||||
|
||||
|
||||
## 1.0.1
|
||||
|
||||
* GMail account listing was broken in 1.0.0, fixed again
|
||||
|
||||
|
||||
## 1.0.0
|
||||
|
||||
* K-9 Mail integration, APG supporting beta build of K-9 Mail
|
||||
* Support of more file managers (including ASTRO)
|
||||
* Slovenian translation
|
||||
* New database, much faster, less memory usage
|
||||
* Defined Intents and content provider for other apps
|
||||
* Bugfixes
|
||||
16
OpenKeychain/src/main/res/raw-kn/help_start.md
Normal file
16
OpenKeychain/src/main/res/raw-kn/help_start.md
Normal file
@@ -0,0 +1,16 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
## How do I activate OpenKeychain in K-9 Mail?
|
||||
To use OpenKeychain with K-9 Mail, you want to follow these steps:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
|
||||
|
||||
## I found a bug in OpenKeychain!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Contribute
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Translations
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
Licentie: GPLv3+
|
||||
|
||||
## Ontwikkelaars
|
||||
## Hoofdontwikkelaars
|
||||
* Dominik Schürmann (beheerder)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Medewerkers
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ Licentie: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (ontwikkelaar van APG)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Bibliotheken
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 licentie)
|
||||
@@ -38,9 +57,9 @@ Licentie: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache licentie v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache licentie v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache licentie v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache licentie v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache licentie v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache licentie v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT licentie)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache licentie v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache licentie v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache licentie v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache licentie v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Eerste versie waarin YubiKey volledig wordt ondersteund vanuit de gebruikersinterface: sleutels aanmaken, YubiKey binden aan sleutels, ...
|
||||
* Material design
|
||||
* Integratie van QR-scanner (nieuwe machtigingen vereist)
|
||||
* Integratie van QR-code scannen (nieuwe permissies vereist)
|
||||
* Sleutelaanmaakwizard verbeterd
|
||||
* Probleem met ontbrekende contacten na synchronisatie opgelost
|
||||
* Vereist Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Oplossing voor probleem waarbij sommige geldige sleutels weergegeven werden als ingetrokken of verlopen
|
||||
* Aanvaard geen ondertekeningen door verlopen of ingetrokken subsleutels
|
||||
* Ondersteuning voor Keybase.io in geavanceerde modus
|
||||
* Methode om alle sleutels tegelijk bij te werken
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Nieuw design voor ontcijferingsscherm
|
||||
* Nieuw icoon en kleuren
|
||||
* Oplossing voor importeren van geheime sleutels van Symantec Encryption Desktop
|
||||
* Subsleutel-ID's op Yubikeys worden nu currect gecontroleerd
|
||||
* Experimentele ondersteuning voor YubiKey: subsleutel-ID's worden nu correct gecontroleerd
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Volledige ondersteuning voor Yubikey ondertekeningsgeneratie en ontcijfering!
|
||||
* Stel installeerbare compatibele apps voor in apps-lijst
|
||||
* Nieuw design voor ontcijferingsschermen
|
||||
* Veel oplossingen voor sleutelimporteren, lost ook gestripte sleutels op
|
||||
@@ -55,12 +63,13 @@
|
||||
* Oplossing voor gebruikers-ID-intrekkingscertificaten
|
||||
* Nieuwe cloud search (zoekt op traditionele sleutelservers en keybase.io)
|
||||
* Ondersteuning voor strippen van sleutels in OpenKeychain
|
||||
* Experimentele ondersteuning voor YubiKey: ondersteuning voor aanmaken en ontsleutelen van ondertekeningen
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Oplossing voor gebroken sleutels in 2.9.1
|
||||
* Yubikey-ontsleuteling werkt nu via API
|
||||
* Experimentele ondersteuning voor YubiKey: ontsleuteling werkt nu via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Oplossing voor sleutelvlaggen (ondersteunt nu Mailvelope 0.7 sleutels)
|
||||
* Verbeterde behandeling van wachtwoorden
|
||||
* Sleutels delen via SafeSlinger
|
||||
* Yubikey: optie om andere PINs toe te staan, momenteel werkt enkel ondertekenen via de OpenPGP API, niet in OpenKeychain zelf
|
||||
* Experimentele ondersteuning voor YubiKey: instelling om andere PIN's toe te laten, momenteel werkt ondertekenen enkel via de OpenPGP API, niet binnen OpenKeychain
|
||||
* Oplossing voor gestripte sleutels
|
||||
* SHA256 als standaard voor compatibiliteit
|
||||
* Intent API is veranderd, zie https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Oplossing voor crashes geïntroduceerd in v2.8
|
||||
* Experimentele ondersteuning voor ECC
|
||||
* Experimentele ondersteuning voor Yubikey (alleen ondertekenen met geïmporteerde sleutels)
|
||||
* Experimentele ondersteuning voor YubiKey: enkel ondertekenen met geïmporteerde sleutels
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
Лицензия: GPLv3+
|
||||
|
||||
## Разработчики
|
||||
## Ведущие разработчики
|
||||
* Dominik Schürmann (Ведущий разработчик)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Участники
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (разработчик APG)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Используемые библиотеки
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -3,7 +3,7 @@
|
||||
## Подтверждение ключей
|
||||
Без подтверждения Вы не можете быть уверены, что ключ принадлежит определенному человеку.
|
||||
Простейший способ подтвердить - отсканировать QR код или получить ключ через NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
Для подтверждения ключей более чем двух человек, мы рекомендуем использовать один из доступных методов обмена ключами.
|
||||
|
||||
## Статус ключей
|
||||
|
||||
@@ -17,9 +17,9 @@ To confirm keys between more than two persons, we suggest to use the key exchang
|
||||
Отозван: Этот ключ больше не действителен. Владелец ключа отозвал его.
|
||||
|
||||
## Подробная информация
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
"Подтверждение ключей" в OpenKeychain реализовано методом сертификации, согласно стандарту OpenPGP.
|
||||
Эта сертификация представляет собой ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) , описанной в стандарте:
|
||||
"Издатель такой подписи (поручитель) никак не оговаривает, что провёл какую-то проверку ключа и его связь с лицом, чьё имя указано в сертификате."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
## How do I activate OpenKeychain in K-9 Mail?
|
||||
To use OpenKeychain with K-9 Mail, you want to follow these steps:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
|
||||
## Как мне активировать OpenKeychain в K-9 Mail?
|
||||
Для использования OpenKeychain с K-9 Mail, необходимо выполнить следующие шаги:
|
||||
1. Открыть K-9 Mail и долгим нажатием выбрать учетную запись с которой будет использоваться OpenKeychain.
|
||||
2. Выбрать "Настойки учетной записи" и опуститься в самый конец меню до пункта "Шифрование".
|
||||
3. Нажать на "OpenPGP Provider" и выбрать OpenKeychain из списка.
|
||||
|
||||
## I found a bug in OpenKeychain!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
## Я нашел ошибку в OpenKeychain!
|
||||
Пожалуйста, сообщайте обо всех проблемах и ошибках в разделе [Решение проблем OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Contribute
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
## Вклад в развитие
|
||||
Если Вы хотите помочь в разработке OpenKeychain, обратитесь к [инструкции на Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Translations
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
## Перевод
|
||||
Помогите переводить OpenKeychain! Каждый может принять участие в переводе [OpenKeychain на Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
Licenca: GPLv3+
|
||||
|
||||
## Razvijalci
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Skrbnik)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ Licenca: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Knjižnice
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (Licenca MIT X11)
|
||||
@@ -38,9 +57,9 @@ Licenca: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Licenca Apache v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Licenca Apache v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Licenca Apache v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Licenca Apache v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Licenca Apache v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (Licenca MIT)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Licenca Apache v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Licenca Apache v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Licenca Apache v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,27 +6,46 @@
|
||||
|
||||
Лиценца: ГПЛв3+
|
||||
|
||||
## Програмери
|
||||
* Dominik Schürmann (главни програмер)
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
* Bahtiar „kalkin“ Gadimov
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Greg Witczak
|
||||
## Главни програмери
|
||||
* Доминик Ширман (Dominik Schürmann, одржавалац)
|
||||
* Винсент Брајтмозер (Vincent Breitmoser)
|
||||
|
||||
## Доприносиоци
|
||||
* Adithya Abraham Philip
|
||||
* Арт Окатаин (Art O Cathain)
|
||||
* Еш Хјуџис (Ash Hughes)
|
||||
* Брајан Ц. Барнс (Brian C. Barnes)
|
||||
* Бахтјар „kalkin“ Гадимов (Bahtiar Gadimov)
|
||||
* Данијел Алберт (Daniel Albert)
|
||||
* Данијел Хаман (Daniel Hammann)
|
||||
* Данијел Хас (Daniel Haß)
|
||||
* Данијел Нелц (Daniel Nelz)
|
||||
* Данијел Рамос (Daniel Ramos)
|
||||
* Грег Вичак (Greg Witczak)
|
||||
* „iseki“
|
||||
* Ишан Кана (Ishan Khanna)
|
||||
* „jellysheep“
|
||||
* „Jesperbk“
|
||||
* „jkolo“
|
||||
* Џои Кастиљо (Joey Castillo)
|
||||
* Каи Ђианг (Kai Jiang)
|
||||
* Картик Арора (Kartik Arora)
|
||||
* „Kent“
|
||||
* „ligi“
|
||||
* Лукас Зорић (Lukas Zorich)
|
||||
* Маноџ Кана (Manoj Khanna)
|
||||
* „mar-v-in“
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* Маркус Доитс (Markus Doits)
|
||||
* Мироџин Бакши (Miroojin Bakshi)
|
||||
* Морган Гангвер (Morgan Gangwere)
|
||||
* Никил Питер Раџ (Nikhil Peter Raj)
|
||||
* Паул Сарбиновски (Paul Sarbinowski)
|
||||
* „Senecaso“
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (АПГ 1.x)
|
||||
* „steelman“
|
||||
* „Thialfihar“ (АПГ програмер)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Библиотеке
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (МИТ Икс11 лиценца)
|
||||
@@ -38,9 +57,9 @@
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Апачи лиценца в2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Апачи лиценца в2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Апачи лиценца в2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Материјал дизајн)</a> (Апачи лиценца в2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Апачи лиценца в2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Апачи лиценца в2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (МИТ лиценца)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Апачи лиценца в2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Апачи лиценца в2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Апачи лиценца в2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Апачи лиценца в2)
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
## Напредни подаци
|
||||
„Потврда кључа“ у Отвореном кључарнику се реализује прављењем сертификације по ОпенПГП стандарду.
|
||||
Ова сертификација је [„општа сертификација (0x10)“](http://tools.ietf.org/html/rfc4880#section-5.2.1) описана стандардом у:
|
||||
Ова сертификација је [„општа сертификација (0x10)“](http://tools.ietf.org/html/rfc4880#section-5.2.1) описана у стандарду:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
[//]: #
|
||||
|
||||
## 3.2beta2
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Прво издање са пуном подршком за Јубикључ преко корисничког сучеља: уређивање кључева, повезивање Јубикључева на кључеве,...
|
||||
* Материјал дизајн
|
||||
* Интеграција читача бар-кôда (захтева нове дозволе)
|
||||
* Побољшан чаробњак прављења кључа
|
||||
@@ -11,8 +19,9 @@
|
||||
* Поједностављење поставки криптографије, бољи избор безбедних шифрара
|
||||
* АПИ: одвојени потписи, слободан избор кључа за потпис,...
|
||||
* Поправка: неки од важећих кључева су били приказивани као опозвани или истекли
|
||||
* Не прихаћај потписе од истеклих или опозваних кључева
|
||||
* Не прихатај потписе од истеклих или опозваних кључева
|
||||
* Keybase.io подршка у напредном приказу
|
||||
* метода ажурирања свих кључева одједном
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Редизајн екрана дешифровања
|
||||
* Нова употреба икона и боја
|
||||
* Поправка увоза тајних кључева са „Symantec Encryption Desktop“
|
||||
* ИД-ови поткључева на Јубикључу сада се исправно проверавају
|
||||
* Експериментална подршка за Јубикључ: ИД-ови поткључа сада се исправно проверавају
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Пуна подршка за прављење и дешифровање Јубикључ потписа!
|
||||
* Предлози за инсталабилне компатибилне апликације у списку апликација
|
||||
* Нови дизајн за екране дешифровања
|
||||
* Много поправки за увоз кључа, такође поправљени огољени кључеви
|
||||
@@ -55,12 +63,13 @@
|
||||
* Поправка корисничког ид-а сертификата опозива
|
||||
* Нова клауд претрага (тражи преко традиционални сервера кључева и keybase.io)
|
||||
* Подршка за огољивање кључева унутар Отвореног кључарника
|
||||
* Експериментална подршка за Јубикључ: подршка за генерисање потписа и дешифровање
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Поправка кључева покварених у 2.9.1
|
||||
* Јубикључ дешифровање сада ради преко АПИ-ја
|
||||
* Експериментална подршка за Јубикључ: дешифровање сада ради преко АПИ-ја
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Поправка руковања заставицама кључа (подршка за Mailvelope 0.7 кључеве)
|
||||
* Побољшано руковање лозинкама
|
||||
* Дељење кључа преко Сејфслингера (SafeSlinger)
|
||||
* Јубикључ: опција за дозволу осталих ПИН-ова, тренутно ради само потписивање преко ОпенПГП АПИ-ја, не унутар Отвореног кључарника
|
||||
* Експериментална подршка за Јубикључ: поставка за дозволу осталих ПИНова, за сада само потписивање преко ОпенПГП АПИ-ја ради, не унутар Отвореног кључарника
|
||||
* Поправка употребе огољених кључева
|
||||
* СХА256 подразумевано због компатибилности
|
||||
* Интент АПИ је измењен, погледајте https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Поправка рушења која су се појавила у в2.8
|
||||
* Експериментална подршка за ЕЦЦ
|
||||
* Експериментална подршка за Јубикључ (Yubikey) (само пријава са увезеним кључевима)
|
||||
* Експериментална подршка за Јубикључ: потписивање само увезеним кључевима
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTERING: Var vänlig och sätt varje mening på sin egen rad, Transifex sätter varje rad i sitt eget fält för översättningar!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
|
||||
[OpenKeychain](http://www.openkeychain.org) är en OpenPGP-implementation till Android.
|
||||
|
||||
License: GPLv3+
|
||||
Licens: GPLv3+
|
||||
|
||||
## Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
## Huvudsakliga utvecklare
|
||||
* Dominik Schürmann (Projektledare)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Medarbetare
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,22 +19,37 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG-utvecklare)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
|
||||
## Biblioteken
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11-licens)
|
||||
* [SafeSlinger's bibliotek för utbyte](https://github.com/SafeSlingerProject/exchange-android) (MIT-licens)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
|
||||
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
|
||||
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,22 +1,22 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTERING: Var vänlig och sätt varje mening på sin egen rad, Transifex sätter varje rad i sitt eget fält för översättningar!)
|
||||
|
||||
## Key Confirmation
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
## Nyckelbekräftelse
|
||||
Utan bekräftelse kan du inte vara säker på om en nyckel verkligen motsvarar en viss person.
|
||||
Det enklaste sättet att bekräfta en nyckel är genom att skanna QR-koden eller att byta ut den via NFC.
|
||||
För att bekräfta nycklar mellan fler än två personer så föreslår vi att du använder utbytesmetoden som är passande för dina nycklar.
|
||||
|
||||
## Key Status
|
||||
## Status för nyckel
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
Bekräftat: Du har redan bekräftat den här nyckeln, t.ex genom att skanna QR-koden.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
Utgången: Den här nyckeln är inte längre giltig. Endast ägaren kan förlänga dess giltighet.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
|
||||
## Advanced Information
|
||||
## Avancerad information
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
|
||||
@@ -1,18 +1,27 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTERING: Var vänlig och sätt varje mening på sin egen rad, Transifex sätter varje rad i sitt eget fält för översättningar!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
* Första versionen med fullt YubiKey-stöd tillgängligt från användargränssnittet: Redigera nycklar. binda YubiKey till nycklar,...
|
||||
* Materialkonstruktion
|
||||
* Integrering av skanning av QR-kod (Nya behörigheter krävs)
|
||||
* Förbättrade guiden för skapande av nyckel
|
||||
* Fixa kontakter som saknas efter synkronisering
|
||||
* Kräver Android 4
|
||||
* Redesigned key screen
|
||||
* Simplify crypto preferences, better selection of secure ciphers
|
||||
* API: Detached signatures, free selection of signing key,...
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Keybase.io-stöd i avancerad vy
|
||||
* Metod för att uppdatera alla nycklar på en gång
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -23,19 +32,19 @@
|
||||
## 3.1.1
|
||||
|
||||
* Fix key export to files (they were written partially)
|
||||
* Fix crash on Android 2.3
|
||||
* Fixa krasch i Android 2.3
|
||||
|
||||
|
||||
## 3.1
|
||||
|
||||
* Fix crash on Android 5
|
||||
* New certify screen
|
||||
* Fixa krasch i Android 5
|
||||
Ny certifieringsskärm
|
||||
* Secure Exchange directly from key list (SafeSlinger library)
|
||||
* New QR Code program flow
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
Fixa trasiga nycklar i 2.9.1
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
[//]: # (NOTERING: Var vänlig och sätt varje mening på sin egen rad, Transifex sätter varje rad i sitt eget fält för översättningar!)
|
||||
|
||||
## How do I activate OpenKeychain in K-9 Mail?
|
||||
To use OpenKeychain with K-9 Mail, you want to follow these steps:
|
||||
## Hur aktiverar jag OpenKeychain i K-9 Mail?
|
||||
För att använda OpenKeychain med K-9 Mail så ska du följa dessa steg:
|
||||
1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
|
||||
2. Select "Account settings", scroll to the very bottom and click "Cryptography".
|
||||
3. Click on "OpenPGP Provider" and select OpenKeychain from the list.
|
||||
2. Välj "Konto-inställningar", skrolla längst ner och klicka på "Kryptering".
|
||||
3. Klicka på "OpenPGP-leverantör" och välj OpenKeyChain från listan.
|
||||
|
||||
## I found a bug in OpenKeychain!
|
||||
Please report the bug using the [issue tracker of OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
## Jag hittade en bugg i OpenKeychain!
|
||||
Vänligen rapportera buggen genom att använda [problemspåraren för OpenKeychain](https://github.com/openpgp-keychain/openpgp-keychain/issues).
|
||||
|
||||
## Contribute
|
||||
If you want to help us developing OpenKeychain by contributing code [follow our small guide on Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
## Bidra
|
||||
Om du vill hjälpa oss att utveckla OpenKeychain genom att bidra med kod [följ vår lilla guide på Github](https://github.com/openpgp-keychain/openpgp-keychain#contribute-code).
|
||||
|
||||
## Translations
|
||||
## Översättningar
|
||||
Help translating OpenKeychain! Everybody can participate at [OpenKeychain on Transifex](https://www.transifex.com/projects/p/open-keychain/).
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
@@ -6,8 +6,12 @@
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Developers
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
@@ -15,18 +19,33 @@ License: GPLv3+
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* Thialfihar (APG 1.x)
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
@@ -38,9 +57,9 @@ License: GPLv3+
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design)</a> (Apache License v2)
|
||||
* [MaterialNavigationDrawer](https://github.com/neokree/MaterialNavigationDrawer) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/dschuermann/html-textview) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
@@ -1,9 +1,17 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
* New decryption screen
|
||||
* Decryption of multiple files at once
|
||||
* Better handling of YubiKey errors
|
||||
|
||||
## 3.2
|
||||
|
||||
* First version with full YubiKey support available from the user interface: Edit keys, bind YubiKey to keys,...
|
||||
* Material design
|
||||
* Integration of QR Scanner (New permissions required)
|
||||
* Integration of QR Code Scanning (New permissions required)
|
||||
* Improved key creation wizard
|
||||
* Fix missing contacts after sync
|
||||
* Requires Android 4
|
||||
@@ -13,6 +21,7 @@
|
||||
* Fix: Some valid keys were shown revoked or expired
|
||||
* Don't accept signatures by expired or revoked subkeys
|
||||
* Keybase.io support in advanced view
|
||||
* Method to update all keys at once
|
||||
|
||||
|
||||
## 3.1.2
|
||||
@@ -35,7 +44,7 @@
|
||||
* Redesigned decrypt screen
|
||||
* New icon usage and colors
|
||||
* Fix import of secret keys from Symantec Encryption Desktop
|
||||
* Subkey IDs on Yubikeys are now checked correctly
|
||||
* Experimental YubiKey support: Subkey IDs are now checked correctly
|
||||
|
||||
|
||||
## 3.0.1
|
||||
@@ -46,7 +55,6 @@
|
||||
|
||||
## 3.0
|
||||
|
||||
* Full support for Yubikey signature generation and decryption!
|
||||
* Propose installable compatible apps in apps list
|
||||
* New design for decryption screens
|
||||
* Many fixes for key import, also fixes stripped keys
|
||||
@@ -55,12 +63,13 @@
|
||||
* Fixing user id revocation certificates
|
||||
* New cloud search (searches over traditional keyservers and keybase.io)
|
||||
* Support for stripping keys inside OpenKeychain
|
||||
* Experimental YubiKey support: Support for signature generation and decryption
|
||||
|
||||
|
||||
## 2.9.2
|
||||
|
||||
* Fix keys broken in 2.9.1
|
||||
* Yubikey decryption now working via API
|
||||
* Experimental YubiKey support: Decryption now working via API
|
||||
|
||||
|
||||
## 2.9.1
|
||||
@@ -69,7 +78,7 @@
|
||||
* Fix key flags handling (now supporting Mailvelope 0.7 keys)
|
||||
* Improved passphrase handling
|
||||
* Key sharing via SafeSlinger
|
||||
* Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Experimental YubiKey support: Preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain
|
||||
* Fix usage of stripped keys
|
||||
* SHA256 as default for compatibility
|
||||
* Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API
|
||||
@@ -80,7 +89,7 @@
|
||||
|
||||
* Fixing crashes introduced in v2.8
|
||||
* Experimental ECC support
|
||||
* Experimental Yubikey support (signing-only with imported keys)
|
||||
* Experimental YubiKey support: Only signing with imported keys
|
||||
|
||||
|
||||
## 2.8
|
||||
|
||||
65
OpenKeychain/src/main/res/raw-vi/help_about.md
Normal file
65
OpenKeychain/src/main/res/raw-vi/help_about.md
Normal file
@@ -0,0 +1,65 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
[http://www.openkeychain.org](http://www.openkeychain.org)
|
||||
|
||||
[OpenKeychain](http://www.openkeychain.org) is an OpenPGP implementation for Android.
|
||||
|
||||
License: GPLv3+
|
||||
|
||||
## Main Developers
|
||||
* Dominik Schürmann (Maintainer)
|
||||
* Vincent Breitmoser
|
||||
|
||||
## Contributors
|
||||
* Adithya Abraham Philip
|
||||
* Art O Cathain
|
||||
* Ash Hughes
|
||||
* Brian C. Barnes
|
||||
* Bahtiar 'kalkin' Gadimov
|
||||
* Daniel Albert
|
||||
* Daniel Hammann
|
||||
* Daniel Haß
|
||||
* Daniel Nelz
|
||||
* Daniel Ramos
|
||||
* Greg Witczak
|
||||
* 'iseki'
|
||||
* Ishan Khanna
|
||||
* 'jellysheep'
|
||||
* 'Jesperbk'
|
||||
* 'jkolo'
|
||||
* Joey Castillo
|
||||
* Kai Jiang
|
||||
* Kartik Arora
|
||||
* 'Kent'
|
||||
* 'ligi'
|
||||
* Lukas Zorich
|
||||
* Manoj Khanna
|
||||
* 'mar-v-in'
|
||||
* Markus Doits
|
||||
* Miroojin Bakshi
|
||||
* Morgan Gangwere
|
||||
* Nikhil Peter Raj
|
||||
* Paul Sarbinowski
|
||||
* 'Senecaso'
|
||||
* Signe Rüsch
|
||||
* Sreeram Boyapati
|
||||
* 'steelman'
|
||||
* 'Thialfihar' (APG developer)
|
||||
* Tim Bray
|
||||
|
||||
## Libraries
|
||||
* [SpongyCastle](http://rtyley.github.com/spongycastle/) (MIT X11 License)
|
||||
* [SafeSlinger Exchange library](https://github.com/SafeSlingerProject/exchange-android) (MIT License)
|
||||
* [Android Support Libraries](http://developer.android.com/tools/support-library/index.html) (Apache License v2)
|
||||
* [KeybaseLib](https://github.com/timbray/KeybaseLib) (Apache License v2)
|
||||
* [TokenAutoComplete](https://github.com/splitwise/TokenAutoComplete) (Apache License v2)
|
||||
* [MiniDNS](https://github.com/rtreffer/minidns) (Apache License v2)
|
||||
* [StickyListHeaders](https://github.com/emilsjolander/StickyListHeaders) (Apache License v2)
|
||||
* [ZXing](https://github.com/zxing/zxing) (Apache License v2)
|
||||
* [ZXing Android Minimal](https://github.com/journeyapps/zxing-android-embedded) (Apache License v2)
|
||||
* [PagerSlidingTabStrip](https://github.com/jpardogo/PagerSlidingTabStrip) (Material Design) (Apache License v2)
|
||||
* [MaterialDrawer](https://github.com/mikepenz/MaterialDrawer) (Apache License v2)
|
||||
* [Snackbar](https://github.com/nispok/snackbar) (MIT License)
|
||||
* [FloatingActionButton](https://github.com/futuresimple/android-floating-action-button) (Apache License v2)
|
||||
* [HtmlTextView](https://github.com/sufficientlysecure/html-textview) (Apache License v2)
|
||||
* [Markdown4J](https://github.com/jdcasey/markdown4j) (Apache License v2)
|
||||
28
OpenKeychain/src/main/res/raw-vi/help_certification.md
Normal file
28
OpenKeychain/src/main/res/raw-vi/help_certification.md
Normal file
@@ -0,0 +1,28 @@
|
||||
[//]: # (NOTE: Please put every sentence in its own line, Transifex puts every line in its own translation field!)
|
||||
|
||||
## Key Confirmation
|
||||
Without confirmation, you cannot be sure if a key really corresponds to a specific person.
|
||||
The simplest way to confirm a key is by scanning the QR Code or exchanging it via NFC.
|
||||
To confirm keys between more than two persons, we suggest to use the key exchange method available for your keys.
|
||||
|
||||
## Key Status
|
||||
|
||||
<img src="status_signature_verified_cutout_24dp"/>
|
||||
Confirmed: You have already confirmed this key, e.g., by scanning the QR Code.
|
||||
<img src="status_signature_unverified_cutout_24dp"/>
|
||||
Unconfirmed: This key has not been confirmed yet. You cannot be sure if the key really corresponds to a specific person.
|
||||
<img src="status_signature_expired_cutout_24dp"/>
|
||||
Expired: This key is no longer valid. Only the owner can extend its validity.
|
||||
<img src="status_signature_revoked_cutout_24dp"/>
|
||||
Revoked: This key is no longer valid. It has been revoked by its owner.
|
||||
|
||||
## Advanced Information
|
||||
A "key confirmation" in OpenKeychain is implemented by creating a certification according to the OpenPGP standard.
|
||||
This certification is a ["generic certification (0x10)"](http://tools.ietf.org/html/rfc4880#section-5.2.1) described in the standard by:
|
||||
"The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID."
|
||||
|
||||
Traditionally, certifications (also with higher certification levels, such as "positive certifications" (0x13)) are organized in OpenPGP's Web of Trust.
|
||||
Our model of key confirmation is a much simpler concept to avoid common usability problems related to this Web of Trust.
|
||||
We assume that keys are verified only to a certain degree that is still usable enough to be executed "on the go".
|
||||
We also do not implement (potentially transitive) trust signatures or an ownertrust database like in GnuPG.
|
||||
Furthermore, keys which contain at least one user ID certified by a trusted key will be marked as "confirmed" in the key listings.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user