Merge pull request #2255 from open-keychain/timber

Timber
This commit is contained in:
Dominik Schürmann
2018-01-22 11:11:17 +01:00
committed by GitHub
163 changed files with 798 additions and 1109 deletions
+3
View File
@@ -88,6 +88,8 @@ dependencies {
exclude module: 'recyclerview-v7' exclude module: 'recyclerview-v7'
} }
compile "com.jakewharton.timber:timber:4.5.1"
compile 'org.glassfish:javax.annotation:10.0-b28' compile 'org.glassfish:javax.annotation:10.0-b28'
provided "com.google.auto.value:auto-value:1.4.1" provided "com.google.auto.value:auto-value:1.4.1"
apt "com.google.auto.value:auto-value:1.4.1" apt "com.google.auto.value:auto-value:1.4.1"
@@ -154,6 +156,7 @@ dependencyVerification {
'com.android.support:transition:36c688825a8c0e6e879e18886de83dc90673322822d5b606ee302f70fb558e16', 'com.android.support:transition:36c688825a8c0e6e879e18886de83dc90673322822d5b606ee302f70fb558e16',
'com.squareup.okio:okio:734269c3ebc5090e3b23566db558f421f0b4027277c79ad5d176b8ec168bb850', 'com.squareup.okio:okio:734269c3ebc5090e3b23566db558f421f0b4027277c79ad5d176b8ec168bb850',
'com.fidesmo:nordpol-core:296e71b12884a9cd28cf00ab908973bbf776a90be1f23ac897380d91604e614d', 'com.fidesmo:nordpol-core:296e71b12884a9cd28cf00ab908973bbf776a90be1f23ac897380d91604e614d',
'com.jakewharton.timber:timber:d553d3d3e883ce7d061f1b21b95d6ee0840f3bfbf6d3bd51c5671f0b0f0b0091',
] ]
} }
@@ -16,12 +16,14 @@
package android.support.v4.widget; package android.support.v4.widget;
import java.util.ArrayList;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -37,7 +39,6 @@ import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v4.view.accessibility.AccessibilityRecordCompat; import android.support.v4.view.accessibility.AccessibilityRecordCompat;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.FocusFinder; import android.view.FocusFinder;
import android.view.KeyEvent; import android.view.KeyEvent;
@@ -49,11 +50,11 @@ import android.view.ViewGroup;
import android.view.ViewParent; import android.view.ViewParent;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ScrollView; import android.widget.ScrollView;
import java.util.ArrayList; import timber.log.Timber;
/** /**
* Workaround for bug in support lib. From https://code.google.com/p/android/issues/detail?id=177729 * Workaround for bug in support lib. From https://code.google.com/p/android/issues/detail?id=177729
@@ -444,7 +445,7 @@ public class FlingNestedScrollView extends FrameLayout implements NestedScrollin
if(y != -1) { if(y != -1) {
int pointerIndex = MotionEventCompat.findPointerIndex(ev, y); int pointerIndex = MotionEventCompat.findPointerIndex(ev, y);
if(pointerIndex == -1) { if(pointerIndex == -1) {
Log.e("FlingNestedScrollView", "Invalid pointerId=" + y + " in onInterceptTouchEvent"); Timber.e("Invalid pointerId=" + y + " in onInterceptTouchEvent");
} else { } else {
int y1 = (int)MotionEventCompat.getY(ev, pointerIndex); int y1 = (int)MotionEventCompat.getY(ev, pointerIndex);
int yDiff = Math.abs(y1 - this.mLastMotionY); int yDiff = Math.abs(y1 - this.mLastMotionY);
@@ -521,7 +522,7 @@ public class FlingNestedScrollView extends FrameLayout implements NestedScrollin
case 2: case 2:
int activePointerIndex = MotionEventCompat.findPointerIndex(ev, this.mActivePointerId); int activePointerIndex = MotionEventCompat.findPointerIndex(ev, this.mActivePointerId);
if(activePointerIndex == -1) { if(activePointerIndex == -1) {
Log.e("FlingNestedScrollView", "Invalid pointerId=" + this.mActivePointerId + " in onTouchEvent"); Timber.e("Invalid pointerId=" + this.mActivePointerId + " in onTouchEvent");
} else { } else {
int y = (int)MotionEventCompat.getY(ev, activePointerIndex); int y = (int)MotionEventCompat.getY(ev, activePointerIndex);
int deltaY = this.mLastMotionY - y; int deltaY = this.mLastMotionY - y;
@@ -29,7 +29,6 @@ import android.graphics.Bitmap;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Environment;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.widget.Toast; import android.widget.Toast;
@@ -39,9 +38,10 @@ import org.sufficientlysecure.keychain.provider.TemporaryFileProvider;
import org.sufficientlysecure.keychain.service.ContactSyncAdapterService; import org.sufficientlysecure.keychain.service.ContactSyncAdapterService;
import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService; import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils; import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.PRNGFixes; import org.sufficientlysecure.keychain.util.PRNGFixes;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import timber.log.Timber.DebugTree;
public class KeychainApplication extends Application { public class KeychainApplication extends Application {
@@ -72,7 +72,9 @@ public class KeychainApplication extends Application {
* LinuxPRNGSecureRandomProvider(), 1) for Android <= SDK 17 * LinuxPRNGSecureRandomProvider(), 1) for Android <= SDK 17
*/ */
PRNGFixes.apply(); PRNGFixes.apply();
Log.d(Constants.TAG, "Bouncy Castle set and PRNG Fixes applied!"); Timber.d("Bouncy Castle set and PRNG Fixes applied!");
updateLoggingStatus();
/* /*
if (Constants.DEBUG) { if (Constants.DEBUG) {
@@ -127,7 +129,7 @@ public class KeychainApplication extends Application {
Account account = new Account(Constants.ACCOUNT_NAME, Constants.ACCOUNT_TYPE); Account account = new Account(Constants.ACCOUNT_NAME, Constants.ACCOUNT_TYPE);
if (accounts.length == 0) { if (accounts.length == 0) {
if (!manager.addAccountExplicitly(account, null, null)) { if (!manager.addAccountExplicitly(account, null, null)) {
Log.d(Constants.TAG, "error when adding account via addAccountExplicitly"); Timber.d("error when adding account via addAccountExplicitly");
return null; return null;
} else { } else {
return account; return account;
@@ -136,7 +138,7 @@ public class KeychainApplication extends Application {
return accounts[0]; return accounts[0];
} }
} catch (SecurityException e) { } catch (SecurityException e) {
Log.e(Constants.TAG, "SecurityException when adding the account", e); Timber.e(e, "SecurityException when adding the account");
Toast.makeText(context, R.string.reinstall_openkeychain, Toast.LENGTH_LONG).show(); Toast.makeText(context, R.string.reinstall_openkeychain, Toast.LENGTH_LONG).show();
return null; return null;
} }
@@ -172,4 +174,12 @@ public class KeychainApplication extends Application {
} }
} }
} }
private void updateLoggingStatus() {
Timber.uprootAll();
boolean enableDebugLogging = BuildConfig.DEBUG;
if (enableDebugLogging) {
Timber.plant(new DebugTree());
}
}
} }
@@ -23,8 +23,8 @@ import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
public class ClipboardReflection { public class ClipboardReflection {
@@ -37,7 +37,7 @@ public class ClipboardReflection {
ClipData clip = clipboard.getPrimaryClip(); ClipData clip = clipboard.getPrimaryClip();
if (clip == null || clip.getItemCount() == 0) { if (clip == null || clip.getItemCount() == 0) {
Log.e(Constants.TAG, "No clipboard data!"); Timber.e("No clipboard data!");
return null; return null;
} }
@@ -19,10 +19,9 @@ package org.sufficientlysecure.keychain.keyimport;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.net.Proxy; import java.net.Proxy;
import java.util.ArrayList; import java.util.ArrayList;
@@ -98,7 +97,7 @@ public class CloudSearch {
if (!problems.isEmpty()) { if (!problems.isEmpty()) {
for (KeyserverClient.CloudSearchFailureException e : problems) { for (KeyserverClient.CloudSearchFailureException e : problems) {
Log.d(Constants.TAG, "Cloud search exception: " + e.getLocalizedMessage()); Timber.d("Cloud search exception: " + e.getLocalizedMessage());
} }
// only throw exception if we didnt get any results // only throw exception if we didnt get any results
@@ -32,15 +32,15 @@ import android.support.annotation.Nullable;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.network.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import org.sufficientlysecure.keychain.pgp.PgpHelper; import org.sufficientlysecure.keychain.pgp.PgpHelper;
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
import org.sufficientlysecure.keychain.pgp.UncachedPublicKey; import org.sufficientlysecure.keychain.pgp.UncachedPublicKey;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import timber.log.Timber;
public class FacebookKeyserverClient implements KeyserverClient { public class FacebookKeyserverClient implements KeyserverClient {
private static final String FB_KEY_URL_FORMAT private static final String FB_KEY_URL_FORMAT
@@ -69,10 +69,10 @@ public class FacebookKeyserverClient implements KeyserverClient {
try { try {
entry.add(getEntry(keyRing, fbUsername)); entry.add(getEntry(keyRing, fbUsername));
} catch (UnsupportedOperationException e) { } catch (UnsupportedOperationException e) {
Log.e(Constants.TAG, "Parsing retrieved Facebook key failed!"); Timber.e("Parsing retrieved Facebook key failed!");
} }
} catch (PgpGeneralException | IOException e) { } catch (PgpGeneralException | IOException e) {
Log.e(Constants.TAG, "Failed parsing key from Facebook during search", e); Timber.e(e, "Failed parsing key from Facebook during search");
throw new QueryFailedException("No valid key found on Facebook"); throw new QueryFailedException("No valid key found on Facebook");
} }
return entry; return entry;
@@ -80,7 +80,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
@Override @Override
public String get(String fbUsername, ParcelableProxy proxy) throws QueryFailedException { public String get(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
Log.d(Constants.TAG, "FacebookKeyserver get: " + fbUsername + " using Proxy: " + proxy.getProxy()); Timber.d("FacebookKeyserver get: " + fbUsername + " using Proxy: " + proxy.getProxy());
String data = query(fbUsername, proxy); String data = query(fbUsername, proxy);
@@ -98,7 +98,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
private String query(String fbUsername, ParcelableProxy proxy) throws QueryFailedException { private String query(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
try { try {
URL url = new URL(String.format(FB_KEY_URL_FORMAT, fbUsername)); URL url = new URL(String.format(FB_KEY_URL_FORMAT, fbUsername));
Log.d(Constants.TAG, "fetching from Facebook with: " + url + " proxy: " + proxy.getProxy()); Timber.d("fetching from Facebook with: " + url + " proxy: " + proxy.getProxy());
/* /*
* For some URLs such as https://www.facebook.com/adithya.abraham/publickey/download * For some URLs such as https://www.facebook.com/adithya.abraham/publickey/download
@@ -125,7 +125,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException at Facebook key download", e); Timber.e(e, "IOException at Facebook key download");
throw new QueryFailedException("Cannot connect to Facebook. " throw new QueryFailedException("Cannot connect to Facebook. "
+ "Check your Internet connection!" + "Check your Internet connection!"
+ (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy())); + (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy()));
@@ -163,7 +163,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
try { try {
if (key.isEC()) { // unsupported key format (ECDH or ECDSA) if (key.isEC()) { // unsupported key format (ECDH or ECDSA)
Log.e(Constants.TAG, "ECDH/ECDSA key - not supported."); Timber.e("ECDH/ECDSA key - not supported.");
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"ECDH/ECDSA keys not supported yet"); "ECDH/ECDSA keys not supported yet");
} }
@@ -172,7 +172,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
entry.setAlgorithm(KeyFormattingUtils.getAlgorithmInfo(algorithm, key.getBitStrength(), entry.setAlgorithm(KeyFormattingUtils.getAlgorithmInfo(algorithm, key.getBitStrength(),
key.getCurveOid())); key.getCurveOid()));
} catch (NumberFormatException | NullPointerException e) { } catch (NumberFormatException | NullPointerException e) {
Log.e(Constants.TAG, "Conversion for bit size, algorithm, or creation date failed.", e); Timber.e(e, "Conversion for bit size, algorithm, or creation date failed.");
// can't use this key // can't use this key
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"Conversion for bit size, algorithm, or creation date failed."); "Conversion for bit size, algorithm, or creation date failed.");
@@ -41,12 +41,13 @@ import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import okhttp3.Response; import okhttp3.Response;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.network.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import org.sufficientlysecure.keychain.pgp.PgpHelper; import org.sufficientlysecure.keychain.pgp.PgpHelper;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import timber.log.Timber;
import static java.util.Locale.ENGLISH;
public class HkpKeyserverClient implements KeyserverClient { public class HkpKeyserverClient implements KeyserverClient {
@@ -148,14 +149,14 @@ public class HkpKeyserverClient implements KeyserverClient {
.addQueryParameter("search", query) .addQueryParameter("search", query)
.build(); .build();
Log.d(Constants.TAG, "Keyserver search: " + url + " using Proxy: " + proxy.getProxy()); Timber.d("Keyserver search: " + url + " using Proxy: " + proxy.getProxy());
data = query(url, proxy); data = query(url, proxy);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
throw new IllegalStateException("Unsupported keyserver URI"); throw new IllegalStateException("Unsupported keyserver URI");
} catch (HttpError e) { } catch (HttpError e) {
if (e.getData() != null) { if (e.getData() != null) {
Log.d(Constants.TAG, "returned error data: " + e.getData().toLowerCase(Locale.ENGLISH)); Timber.d("returned error data: " + e.getData().toLowerCase(ENGLISH));
if (e.getData().toLowerCase(Locale.ENGLISH).contains("no keys found")) { if (e.getData().toLowerCase(Locale.ENGLISH).contains("no keys found")) {
// NOTE: This is also a 404 error for some keyservers! // NOTE: This is also a 404 error for some keyservers!
@@ -193,7 +194,7 @@ public class HkpKeyserverClient implements KeyserverClient {
// set key id only // set key id only
entry.setKeyIdHex("0x" + fingerprintOrKeyId); entry.setKeyIdHex("0x" + fingerprintOrKeyId);
} else { } else {
Log.e(Constants.TAG, "Wrong length for fingerprint/long key id."); Timber.e("Wrong length for fingerprint/long key id.");
// skip this key // skip this key
continue; continue;
} }
@@ -209,7 +210,7 @@ public class HkpKeyserverClient implements KeyserverClient {
calendar.setTimeInMillis(creationDate * 1000); calendar.setTimeInMillis(creationDate * 1000);
entry.setDate(calendar.getTime()); entry.setDate(calendar.getTime());
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
Log.e(Constants.TAG, "Conversation for bit size, algorithm, or creation date failed.", e); Timber.e(e, "Conversation for bit size, algorithm, or creation date failed.");
// skip this key // skip this key
continue; continue;
} }
@@ -229,7 +230,7 @@ public class HkpKeyserverClient implements KeyserverClient {
} }
entry.setExpired(expired); entry.setExpired(expired);
} catch (NullPointerException e) { } catch (NullPointerException e) {
Log.e(Constants.TAG, "Check for revocation or expiry failed.", e); Timber.e(e, "Check for revocation or expiry failed.");
// skip this key // skip this key
continue; continue;
} }
@@ -251,7 +252,7 @@ public class HkpKeyserverClient implements KeyserverClient {
} catch (UnsupportedEncodingException ignored) { } catch (UnsupportedEncodingException ignored) {
// will never happen, because "UTF8" is supported // will never happen, because "UTF8" is supported
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
Log.e(Constants.TAG, "User ID encoding broken", e); Timber.e(e, "User ID encoding broken");
// skip this user id // skip this user id
continue; continue;
} }
@@ -278,13 +279,13 @@ public class HkpKeyserverClient implements KeyserverClient {
.addQueryParameter("search", keyIdHex) .addQueryParameter("search", keyIdHex)
.build(); .build();
Log.d(Constants.TAG, "Keyserver get: " + url + " using Proxy: " + proxy.getProxy()); Timber.d("Keyserver get: " + url + " using Proxy: " + proxy.getProxy());
data = query(url, proxy); data = query(url, proxy);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
throw new IllegalStateException("Unsupported keyserver URI"); throw new IllegalStateException("Unsupported keyserver URI");
} catch (HttpError httpError) { } catch (HttpError httpError) {
Log.d(Constants.TAG, "Failed to get key at HkpKeyserver", httpError); Timber.d(httpError, "Failed to get key at HkpKeyserver");
if (httpError.getCode() == 404) { if (httpError.getCode() == 404) {
throw new KeyserverClient.QueryNotFoundException("not found"); throw new KeyserverClient.QueryNotFoundException("not found");
} }
@@ -324,7 +325,7 @@ public class HkpKeyserverClient implements KeyserverClient {
String responseBody = getResponseBodyAsUtf8(response); String responseBody = getResponseBodyAsUtf8(response);
Log.d(Constants.TAG, "Adding key with URL: " + url Timber.d("Adding key with URL: " + url
+ ", response code: " + response.code() + ", response code: " + response.code()
+ ", body: " + responseBody); + ", body: " + responseBody);
@@ -333,10 +334,10 @@ public class HkpKeyserverClient implements KeyserverClient {
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
throw new KeyserverClient.AddKeyException(); throw new KeyserverClient.AddKeyException();
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
Log.e(Constants.TAG, "Unsupported keyserver URI", e); Timber.e(e, "Unsupported keyserver URI");
throw new KeyserverClient.AddKeyException(); throw new KeyserverClient.AddKeyException();
} }
} }
@@ -373,7 +374,7 @@ public class HkpKeyserverClient implements KeyserverClient {
throw new HttpError(response.code(), responseBody); throw new HttpError(response.code(), responseBody);
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException at HkpKeyserver", e); Timber.e(e, "IOException at HkpKeyserver");
String proxyInfo = proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy(); String proxyInfo = proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy();
Throwable cause = e.getCause(); Throwable cause = e.getCause();
String causeName = cause != null ? cause.getClass().getSimpleName() : "generic"; String causeName = cause != null ? cause.getClass().getSimpleName() : "generic";
@@ -22,11 +22,10 @@ import com.textuality.keybase.lib.KeybaseQuery;
import com.textuality.keybase.lib.Match; import com.textuality.keybase.lib.Match;
import com.textuality.keybase.lib.User; import com.textuality.keybase.lib.User;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient; import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -60,7 +59,7 @@ public class KeybaseKeyserverClient implements KeyserverClient {
results.add(makeEntry(match, query)); results.add(makeEntry(match, query));
} }
} catch (KeybaseException e) { } catch (KeybaseException e) {
Log.e(Constants.TAG, "keybase result parsing error", e); Timber.e(e, "keybase result parsing error");
throw new QueryFailedException("Unexpected structure in keybase search result: " + e.getMessage()); throw new QueryFailedException("Unexpected structure in keybase search result: " + e.getMessage());
} }
@@ -21,7 +21,6 @@ import android.content.Context;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.keyimport.CloudSearch; import org.sufficientlysecure.keychain.keyimport.CloudSearch;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.keyimport.KeyserverClient; import org.sufficientlysecure.keychain.keyimport.KeyserverClient;
@@ -31,10 +30,10 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.network.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
@@ -71,12 +70,12 @@ public class ImportKeysListCloudLoader
mEntryListWrapper = new AsyncTaskResultWrapper<>(mEntryList, null); mEntryListWrapper = new AsyncTaskResultWrapper<>(mEntryList, null);
if (mState.mServerQuery == null) { if (mState.mServerQuery == null) {
Log.e(Constants.TAG, "mServerQuery is null!"); Timber.e("mServerQuery is null!");
return mEntryListWrapper; return mEntryListWrapper;
} }
if (mState.mServerQuery.startsWith("0x") && mState.mServerQuery.length() == 42) { if (mState.mServerQuery.startsWith("0x") && mState.mServerQuery.length() == 42) {
Log.d(Constants.TAG, "This search is based on a unique fingerprint. Enforce a fingerprint check!"); Timber.d("This search is based on a unique fingerprint. Enforce a fingerprint check!");
queryServer(true); queryServer(true);
} else { } else {
queryServer(false); queryServer(false);
@@ -148,7 +147,7 @@ public class ImportKeysListCloudLoader
// add result to data // add result to data
if (enforceFingerprint) { if (enforceFingerprint) {
String fingerprintHex = mState.mServerQuery.substring(2); String fingerprintHex = mState.mServerQuery.substring(2);
Log.d(Constants.TAG, "fingerprint: " + fingerprintHex); Timber.d("fingerprint: " + fingerprintHex);
// query must return only one result! // query must return only one result!
if (searchResult.size() == 1) { if (searchResult.size() == 1) {
if (fingerprintHex.length() != 40) { if (fingerprintHex.length() != 40) {
@@ -22,7 +22,6 @@ import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.operations.results.GetKeyResult; import org.sufficientlysecure.keychain.operations.results.GetKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
@@ -32,8 +31,8 @@ import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing.IteratorWithIOThrow; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing.IteratorWithIOThrow;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.PositionAwareInputStream; import org.sufficientlysecure.keychain.util.PositionAwareInputStream;
import timber.log.Timber;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -70,7 +69,7 @@ public class ImportKeysListLoader
} }
if (mState == null) { if (mState == null) {
Log.e(Constants.TAG, "Input data is null!"); Timber.e("Input data is null!");
return mEntryListWrapper; return mEntryListWrapper;
} }
@@ -123,7 +122,7 @@ public class ImportKeysListLoader
mData.add(new ImportKeysListEntry(mContext, it.next())); mData.add(new ImportKeysListEntry(mContext, it.next()));
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException on parsing key file! Return NoValidKeysException!", e); Timber.e(e, "IOException on parsing key file! Return NoValidKeysException!");
OperationResult.OperationLog log = new OperationResult.OperationLog(); OperationResult.OperationLog log = new OperationResult.OperationLog();
log.add(OperationResult.LogType.MSG_GET_NO_VALID_KEYS, 0); log.add(OperationResult.LogType.MSG_GET_NO_VALID_KEYS, 0);
GetKeyResult getKeyResult = new GetKeyResult(GetKeyResult.RESULT_ERROR_NO_VALID_KEYS, log); GetKeyResult getKeyResult = new GetKeyResult(GetKeyResult.RESULT_ERROR_NO_VALID_KEYS, log);
@@ -24,7 +24,6 @@ import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.json.JSONException; import org.json.JSONException;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.linked.resources.GenericHttpsResource; import org.sufficientlysecure.keychain.linked.resources.GenericHttpsResource;
import org.sufficientlysecure.keychain.linked.resources.GithubResource; import org.sufficientlysecure.keychain.linked.resources.GithubResource;
import org.sufficientlysecure.keychain.linked.resources.TwitterResource; import org.sufficientlysecure.keychain.linked.resources.TwitterResource;
@@ -32,8 +31,8 @@ import org.sufficientlysecure.keychain.operations.results.LinkedVerifyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.network.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -83,18 +82,18 @@ public abstract class LinkedTokenResource extends LinkedResource {
if (!"openpgpid+token".equals(uri.getScheme()) if (!"openpgpid+token".equals(uri.getScheme())
&& !"openpgpid+cookie".equals(uri.getScheme())) { && !"openpgpid+cookie".equals(uri.getScheme())) {
Log.e(Constants.TAG, "unknown uri scheme in (suspected) linked id packet"); Timber.e("unknown uri scheme in (suspected) linked id packet");
return null; return null;
} }
if (!uri.isOpaque()) { if (!uri.isOpaque()) {
Log.e(Constants.TAG, "non-opaque uri in (suspected) linked id packet"); Timber.e("non-opaque uri in (suspected) linked id packet");
return null; return null;
} }
String specific = uri.getSchemeSpecificPart(); String specific = uri.getSchemeSpecificPart();
if (!specific.contains("@")) { if (!specific.contains("@")) {
Log.e(Constants.TAG, "unknown uri scheme in linked id packet"); Timber.e("unknown uri scheme in linked id packet");
return null; return null;
} }
@@ -192,15 +191,15 @@ public abstract class LinkedTokenResource extends LinkedResource {
res = fetchResource(context, log, 1); res = fetchResource(context, log, 1);
} catch (HttpStatusException e) { } catch (HttpStatusException e) {
// log verbose output to logcat // log verbose output to logcat
Log.e(Constants.TAG, "http error (" + e.getStatus() + "): " + e.getReason()); Timber.e("http error (" + e.getStatus() + "): " + e.getReason());
log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus())); log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus()));
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2); log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error", e); Timber.e(e, "io error");
log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2); log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2);
} catch (JSONException e) { } catch (JSONException e) {
Log.e(Constants.TAG, "json error", e); Timber.e(e, "json error");
log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2); log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2);
} }
@@ -209,7 +208,7 @@ public abstract class LinkedTokenResource extends LinkedResource {
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log); return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
} }
Log.d(Constants.TAG, "Resource data: '" + res + "'"); Timber.d("Resource data: '" + res + "'");
return verifyString(log, 1, res, fingerprint); return verifyString(log, 1, res, fingerprint);
@@ -258,7 +257,7 @@ public abstract class LinkedTokenResource extends LinkedResource {
public static String getResponseBody(Request request, String... pins) public static String getResponseBody(Request request, String... pins)
throws IOException, HttpStatusException { throws IOException, HttpStatusException {
Log.d("Connection to: " + request.url().url().getHost(), ""); Timber.d("");
OkHttpClient client; OkHttpClient client;
if (pins != null) { if (pins != null) {
client = OkHttpClientFactory.getSimpleClientPinned(getCertificatePinner(request.url().url().getHost(), pins)); client = OkHttpClientFactory.getSimpleClientPinned(getCertificatePinner(request.url().url().getHost(), pins));
@@ -18,10 +18,9 @@
package org.sufficientlysecure.keychain.linked; package org.sufficientlysecure.keychain.linked;
import org.bouncycastle.util.Strings; import org.bouncycastle.util.Strings;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute; import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
@@ -67,7 +66,7 @@ public class UriAttribute {
return new LinkedAttribute(uri, res); return new LinkedAttribute(uri, res);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
Log.e(Constants.TAG, "error parsing uri in (suspected) linked id packet"); Timber.e("error parsing uri in (suspected) linked id packet");
return null; return null;
} }
} }
@@ -27,12 +27,11 @@ import okhttp3.Request;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.linked.LinkedTokenResource; import org.sufficientlysecure.keychain.linked.LinkedTokenResource;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -166,15 +165,15 @@ public class GithubResource extends LinkedTokenResource {
} catch (HttpStatusException e) { } catch (HttpStatusException e) {
// log verbose output to logcat // log verbose output to logcat
Log.e(Constants.TAG, "http error (" + e.getStatus() + "): " + e.getReason()); Timber.e("http error (" + e.getStatus() + "): " + e.getReason());
log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus())); log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus()));
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2); log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error", e); Timber.e(e, "io error");
log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2); log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2);
} catch (JSONException e) { } catch (JSONException e) {
Log.e(Constants.TAG, "json error", e); Timber.e(e, "json error");
log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2); log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2);
} }
@@ -37,6 +37,7 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.linked.LinkedTokenResource; import org.sufficientlysecure.keychain.linked.LinkedTokenResource;
import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -207,15 +208,15 @@ public class TwitterResource extends LinkedTokenResource {
} catch (HttpStatusException e) { } catch (HttpStatusException e) {
// log verbose output to logcat // log verbose output to logcat
Log.e(Constants.TAG, "http error (" + e.getStatus() + "): " + e.getReason()); Timber.e("http error (" + e.getStatus() + "): " + e.getReason());
log.add(LogType.MSG_LV_FETCH_ERROR, 1, Integer.toString(e.getStatus())); log.add(LogType.MSG_LV_FETCH_ERROR, 1, Integer.toString(e.getStatus()));
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.add(LogType.MSG_LV_FETCH_ERROR_URL, 1); log.add(LogType.MSG_LV_FETCH_ERROR_URL, 1);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error", e); Timber.e(e, "io error");
log.add(LogType.MSG_LV_FETCH_ERROR_IO, 1); log.add(LogType.MSG_LV_FETCH_ERROR_IO, 1);
} catch (JSONException e) { } catch (JSONException e) {
Log.e(Constants.TAG, "json error", e); Timber.e(e, "json error");
log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 1); log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 1);
} }
@@ -56,8 +56,7 @@ import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManager;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
@RequiresApi(api = VERSION_CODES.LOLLIPOP) @RequiresApi(api = VERSION_CODES.LOLLIPOP)
@@ -171,12 +170,12 @@ public class KeyTransferInteractor {
try { try {
handleOpenConnection(socket); handleOpenConnection(socket);
Log.d(Constants.TAG, "connection closed ok!"); Timber.d("connection closed ok!");
} catch (SSLHandshakeException e) { } catch (SSLHandshakeException e) {
Log.d(Constants.TAG, "ssl handshake error!", e); Timber.d(e, "ssl handshake error!");
invokeListener(CONNECTION_ERROR_CONNECT, null); invokeListener(CONNECTION_ERROR_CONNECT, null);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "communication error!", e); Timber.e(e, "communication error!");
invokeListener(CONNECTION_ERROR_WHILE_CONNECTED, e.getLocalizedMessage()); invokeListener(CONNECTION_ERROR_WHILE_CONNECTED, e.getLocalizedMessage());
} }
} finally { } finally {
@@ -200,7 +199,7 @@ public class KeyTransferInteractor {
socket = serverSocket.accept(); socket = serverSocket.accept();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "error while listening!", e); Timber.e(e, "error while listening!");
invokeListener(CONNECTION_ERROR_LISTEN, null); invokeListener(CONNECTION_ERROR_LISTEN, null);
return null; return null;
} }
@@ -214,7 +213,7 @@ public class KeyTransferInteractor {
socket = sslSocket; socket = sslSocket;
socket.connect(new InetSocketAddress(InetAddress.getByName(clientHost), clientPort), TIMEOUT_CONNECTING); socket.connect(new InetSocketAddress(InetAddress.getByName(clientHost), clientPort), TIMEOUT_CONNECTING);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "error while connecting!", e); Timber.e(e, "error while connecting!");
if (e instanceof NoRouteToHostException) { if (e instanceof NoRouteToHostException) {
invokeListener(CONNECTION_ERROR_NO_ROUTE_TO_HOST, wifiSsid); invokeListener(CONNECTION_ERROR_NO_ROUTE_TO_HOST, wifiSsid);
} else { } else {
@@ -252,7 +251,7 @@ public class KeyTransferInteractor {
break; break;
} }
} }
Log.d(Constants.TAG, "disconnected"); Timber.d("disconnected");
invokeListener(CONNECTION_LOST, null); invokeListener(CONNECTION_LOST, null);
} }
@@ -270,7 +269,7 @@ public class KeyTransferInteractor {
boolean lineIsDelimiter = delimiterStart.equals(firstLine); boolean lineIsDelimiter = delimiterStart.equals(firstLine);
if (!lineIsDelimiter) { if (!lineIsDelimiter) {
Log.d(Constants.TAG, "bad beginning of key block?"); Timber.d("bad beginning of key block?");
return false; return false;
} }
@@ -25,9 +25,9 @@ import android.content.pm.PackageManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService; import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class NetworkReceiver extends BroadcastReceiver { public class NetworkReceiver extends BroadcastReceiver {
@@ -60,11 +60,11 @@ public class NetworkReceiver extends BroadcastReceiver {
if (isEnabled) { if (isEnabled) {
pm.setComponentEnabledSetting(compName, pm.setComponentEnabledSetting(compName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Log.d(Constants.TAG, "Wifi Receiver is enabled!"); Timber.d("Wifi Receiver is enabled!");
} else { } else {
pm.setComponentEnabledSetting(compName, pm.setComponentEnabledSetting(compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Log.d(Constants.TAG, "Wifi Receiver is disabled!"); Timber.d("Wifi Receiver is disabled!");
} }
} }
} }
@@ -28,7 +28,8 @@ import com.google.auto.value.AutoValue;
import org.bouncycastle.util.encoders.DecoderException; import org.bouncycastle.util.encoders.DecoderException;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
@AutoValue @AutoValue
abstract class SktUri { abstract class SktUri {
@@ -76,7 +77,7 @@ abstract class SktUri {
try { try {
wifiSsid = new String(Hex.decode(optarg[1])); wifiSsid = new String(Hex.decode(optarg[1]));
} catch (DecoderException e) { } catch (DecoderException e) {
Log.d(Constants.TAG, "error parsing ssid in skt uri, ignoring: " + input); Timber.d("error parsing ssid in skt uri, ignoring: " + input);
} }
} }
} }
@@ -19,9 +19,6 @@ package org.sufficientlysecure.keychain.network;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -45,6 +42,8 @@ import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager; import javax.net.ssl.X509TrustManager;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import timber.log.Timber;
public class TlsCertificatePinning { public class TlsCertificatePinning {
@@ -68,7 +67,7 @@ public class TlsCertificatePinning {
sCertificatePins.put(host, baos.toByteArray()); sCertificatePins.put(host, baos.toByteArray());
} catch (IOException e) { } catch (IOException e) {
Log.w(Constants.TAG, e); Timber.w(e);
} }
} }
@@ -89,7 +88,7 @@ public class TlsCertificatePinning {
* to URLs with passed certificate. * to URLs with passed certificate.
*/ */
void pinCertificate(OkHttpClient.Builder builder) { void pinCertificate(OkHttpClient.Builder builder) {
Log.d(Constants.TAG, "Pinning certificate for " + url); Timber.d("Pinning certificate for " + url);
// We don't use OkHttp's CertificatePinner since it can not be used to pin self-signed // We don't use OkHttp's CertificatePinner since it can not be used to pin self-signed
// certificate if such certificate is not accepted by TrustManager. // certificate if such certificate is not accepted by TrustManager.
@@ -65,18 +65,18 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.text.TextUtils; import android.text.TextUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.dialog.SupportInstallDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SupportInstallDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.OrbotStartDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.OrbotStartDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.PreferenceInstallDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.PreferenceInstallDialogFragment;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.List; import java.util.List;
/** /**
* This class is taken from the NetCipher library: https://github.com/guardianproject/NetCipher/ * This class is taken from the NetCipher library: https://github.com/guardianproject/NetCipher/
* All calls that use a shell have been removed. * All calls that use a shell have been removed.
@@ -221,7 +221,7 @@ public class OrbotHelper {
*/ */
public static boolean requestStartTor(Context context) { public static boolean requestStartTor(Context context) {
if (OrbotHelper.isOrbotInstalled(context)) { if (OrbotHelper.isOrbotInstalled(context)) {
Log.i("OrbotHelper", "requestStartTor " + context.getPackageName()); Timber.i("requestStartTor " + context.getPackageName());
Intent intent = getOrbotStartIntent(); Intent intent = getOrbotStartIntent();
intent.putExtra(EXTRA_PACKAGE_NAME, context.getPackageName()); intent.putExtra(EXTRA_PACKAGE_NAME, context.getPackageName());
context.sendBroadcast(intent); context.sendBroadcast(intent);
@@ -245,7 +245,7 @@ public class OrbotHelper {
String foundPackageName = null; String foundPackageName = null;
for (ResolveInfo r : resInfos) { for (ResolveInfo r : resInfos) {
Log.i("OrbotHelper", "market: " + r.activityInfo.packageName); Timber.i("market: " + r.activityInfo.packageName);
if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME) if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME)
|| TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) { || TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) {
foundPackageName = r.activityInfo.packageName; foundPackageName = r.activityInfo.packageName;
@@ -416,7 +416,7 @@ public class OrbotHelper {
private ProgressDialog mProgressDialog; private ProgressDialog mProgressDialog;
public void startOrbotAndListen(final Context context, final boolean showProgress) { public void startOrbotAndListen(final Context context, final boolean showProgress) {
Log.d(Constants.TAG, "starting orbot listener"); Timber.d("starting orbot listener");
if (showProgress) { if (showProgress) {
showProgressDialog(context); showProgressDialog(context);
} }
@@ -447,8 +447,8 @@ public class OrbotHelper {
break; break;
} }
Log.d(Constants.TAG, "Orbot silent start broadcast: " + Timber.d("Orbot silent start broadcast: " +
intent.getStringExtra(OrbotHelper.EXTRA_STATUS)); intent.getStringExtra(EXTRA_STATUS));
} }
}; };
context.registerReceiver(receiver, new IntentFilter(OrbotHelper.ACTION_STATUS)); context.registerReceiver(receiver, new IntentFilter(OrbotHelper.ACTION_STATUS));
@@ -22,8 +22,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
/** /**
* BroadcastReceiver that receives Orbots status * BroadcastReceiver that receives Orbots status
@@ -58,18 +58,18 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
String status = intent.getStringExtra(OrbotHelper.EXTRA_STATUS); String status = intent.getStringExtra(OrbotHelper.EXTRA_STATUS);
this.torRunning = (intent.getStringExtra(OrbotHelper.EXTRA_STATUS).equals(OrbotHelper.STATUS_ON)); this.torRunning = (intent.getStringExtra(OrbotHelper.EXTRA_STATUS).equals(OrbotHelper.STATUS_ON));
Log.d(Constants.TAG, "Receiver: Orbot status: " + status); Timber.d("Receiver: Orbot status: " + status);
if (torRunning) { if (torRunning) {
Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras();
if (extras.containsKey(EXTRA_PROXY_PORT_HTTP)) { if (extras.containsKey(EXTRA_PROXY_PORT_HTTP)) {
this.proxyPortHttp = extras.getInt(EXTRA_PROXY_PORT_HTTP, -1); this.proxyPortHttp = extras.getInt(EXTRA_PROXY_PORT_HTTP, -1);
Log.i(Constants.TAG, "Receiver: Orbot Http proxy at " + proxyPortHttp); Timber.i("Receiver: Orbot Http proxy at " + proxyPortHttp);
} }
if (extras.containsKey(EXTRA_PROXY_PORT_SOCKS)) { if (extras.containsKey(EXTRA_PROXY_PORT_SOCKS)) {
this.proxyPortSocks = extras.getInt(EXTRA_PROXY_PORT_SOCKS, -1); this.proxyPortSocks = extras.getInt(EXTRA_PROXY_PORT_SOCKS, -1);
Log.i(Constants.TAG, "Receiver: Orbot Socks proxy at " + proxyPortSocks); Timber.i("Receiver: Orbot Socks proxy at " + proxyPortSocks);
} }
} }
} }
@@ -46,7 +46,6 @@ import org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult;
import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptData; import org.sufficientlysecure.keychain.pgp.PgpSignEncryptData;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptInputParcel;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation; import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation;
import org.sufficientlysecure.keychain.pgp.Progressable; import org.sufficientlysecure.keychain.pgp.Progressable;
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
@@ -61,7 +60,7 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.CountingOutputStream; import org.sufficientlysecure.keychain.util.CountingOutputStream;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
@@ -259,7 +258,7 @@ public class BackupOperation extends BaseOperation<BackupKeyringParcel> {
if (outStream != null) try { if (outStream != null) try {
outStream.close(); outStream.close();
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "error closing stream", e); Timber.e(e, "error closing stream");
} }
cursor.close(); cursor.close();
} }
@@ -45,9 +45,9 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.BenchmarkInputParcel; import org.sufficientlysecure.keychain.service.BenchmarkInputParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
public class BenchmarkOperation extends BaseOperation<BenchmarkInputParcel> { public class BenchmarkOperation extends BaseOperation<BenchmarkInputParcel> {
@@ -139,7 +139,7 @@ public class BenchmarkOperation extends BaseOperation<BenchmarkInputParcel> {
iterationsFor100ms = iterations; iterationsFor100ms = iterations;
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "internal error during benchmark", e); Timber.e(e, "internal error during benchmark");
log.add(LogType.MSG_INTERNAL_ERROR, 0); log.add(LogType.MSG_INTERNAL_ERROR, 0);
return new BenchmarkResult(BenchmarkResult.RESULT_ERROR, log); return new BenchmarkResult(BenchmarkResult.RESULT_ERROR, log);
} }
@@ -35,7 +35,6 @@ import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.FacebookKeyserverClient; import org.sufficientlysecure.keychain.keyimport.FacebookKeyserverClient;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
@@ -62,11 +61,12 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IteratorWithSize; import org.sufficientlysecure.keychain.util.IteratorWithSize;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache; import org.sufficientlysecure.keychain.util.ParcelableFileCache;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
/** /**
* An operation class which implements high level import * An operation class which implements high level import
@@ -248,7 +248,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
log.add(result, 2); log.add(result, 2);
} catch (IOException | PgpGeneralException e) { } catch (IOException | PgpGeneralException e) {
Log.e(Constants.TAG, "Encountered bad key on import!", e); Timber.e(e, "Encountered bad key on import!");
++badKeys; ++badKeys;
} }
@@ -400,7 +400,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
} catch (KeyserverClient.QueryNotFoundException e) { } catch (KeyserverClient.QueryNotFoundException e) {
throw e; throw e;
} catch (KeyserverClient.QueryFailedException e) { } catch (KeyserverClient.QueryFailedException e) {
Log.d(Constants.TAG, "query failed", e); Timber.d(e, "query failed");
log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage());
return null; return null;
} }
@@ -426,7 +426,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
return keybaseKey; return keybaseKey;
} catch (KeyserverClient.QueryFailedException e) { } catch (KeyserverClient.QueryFailedException e) {
// download failed, too bad. just proceed // download failed, too bad. just proceed
Log.e(Constants.TAG, "query failed", e); Timber.e(e, "query failed");
log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage());
return null; return null;
} }
@@ -452,7 +452,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
return facebookKey; return facebookKey;
} catch (KeyserverClient.QueryFailedException e) { } catch (KeyserverClient.QueryFailedException e) {
// download failed, too bad. just proceed // download failed, too bad. just proceed
Log.e(Constants.TAG, "query failed", e); Timber.e(e, "query failed");
log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage());
return null; return null;
} }
@@ -515,7 +515,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
private ImportKeyResult multiThreadedKeyImport(List<ParcelableKeyRing> keyList, private ImportKeyResult multiThreadedKeyImport(List<ParcelableKeyRing> keyList,
final HkpKeyserverAddress keyServer, final ParcelableProxy proxy, final HkpKeyserverAddress keyServer, final ParcelableProxy proxy,
final boolean skipSave) { final boolean skipSave) {
Log.d(Constants.TAG, "Multi-threaded key import starting"); Timber.d("Multi-threaded key import starting");
final Iterator<ParcelableKeyRing> keyListIterator = keyList.iterator(); final Iterator<ParcelableKeyRing> keyListIterator = keyList.iterator();
final int totKeys = keyList.size(); final int totKeys = keyList.size();
@@ -555,8 +555,8 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
try { try {
accumulator.accumulateKeyImport(importCompletionService.take().get()); accumulator.accumulateKeyImport(importCompletionService.take().get());
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {
Log.e(Constants.TAG, "A key could not be imported during multi-threaded " + Timber.e(e, "A key could not be imported during multi-threaded " +
"import", e); "import");
// do nothing? // do nothing?
if (e instanceof ExecutionException) { if (e instanceof ExecutionException) {
// Since serialKeyRingImport does not throw any exceptions, this is what // Since serialKeyRingImport does not throw any exceptions, this is what
@@ -22,7 +22,6 @@ import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.EditKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.operations.results.RevokeResult; import org.sufficientlysecure.keychain.operations.results.RevokeResult;
@@ -35,7 +34,8 @@ import org.sufficientlysecure.keychain.service.RevokeKeyringParcel;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class RevokeOperation extends BaseReadWriteOperation<RevokeKeyringParcel> { public class RevokeOperation extends BaseReadWriteOperation<RevokeKeyringParcel> {
@@ -97,7 +97,7 @@ public class RevokeOperation extends BaseReadWriteOperation<RevokeKeyringParcel>
} }
} catch (PgpKeyNotFoundException | KeyWritableRepository.NotFoundException e) { } catch (PgpKeyNotFoundException | KeyWritableRepository.NotFoundException e) {
Log.e(Constants.TAG, "could not find key to revoke", e); Timber.e(e, "could not find key to revoke");
log.add(OperationResult.LogType.MSG_REVOKE_ERROR_KEY_FAIL, 1); log.add(OperationResult.LogType.MSG_REVOKE_ERROR_KEY_FAIL, 1);
return new RevokeResult(RevokeResult.RESULT_ERROR, log, masterKeyId); return new RevokeResult(RevokeResult.RESULT_ERROR, log, masterKeyId);
} }
@@ -23,7 +23,6 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverClient; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverClient;
import org.sufficientlysecure.keychain.keyimport.KeyserverClient.AddKeyException; import org.sufficientlysecure.keychain.keyimport.KeyserverClient.AddKeyException;
@@ -42,10 +41,10 @@ import org.sufficientlysecure.keychain.service.UploadKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.network.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import timber.log.Timber;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -130,7 +129,7 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
return null; return null;
} catch (IOException | PgpGeneralException e) { } catch (IOException | PgpGeneralException e) {
log.add(LogType.MSG_UPLOAD_ERROR_IO, 1); log.add(LogType.MSG_UPLOAD_ERROR_IO, 1);
Log.e(Constants.TAG, "error uploading key", e); Timber.e(e, "error uploading key");
return null; return null;
} }
@@ -159,12 +158,12 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
log.add(LogType.MSG_UPLOAD_SUCCESS, 1); log.add(LogType.MSG_UPLOAD_SUCCESS, 1);
return new UploadResult(UploadResult.RESULT_OK, log); return new UploadResult(UploadResult.RESULT_OK, log);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
log.add(LogType.MSG_UPLOAD_ERROR_IO, 1); log.add(LogType.MSG_UPLOAD_ERROR_IO, 1);
return new UploadResult(UploadResult.RESULT_ERROR, log); return new UploadResult(UploadResult.RESULT_ERROR, log);
} catch (AddKeyException e) { } catch (AddKeyException e) {
Log.e(Constants.TAG, "AddKeyException", e); Timber.e(e, "AddKeyException");
log.add(LogType.MSG_UPLOAD_ERROR_UPLOAD, 1); log.add(LogType.MSG_UPLOAD_ERROR_UPLOAD, 1);
return new UploadResult(UploadResult.RESULT_ERROR, log); return new UploadResult(UploadResult.RESULT_ERROR, log);
@@ -24,7 +24,6 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.LogDisplayActivity; import org.sufficientlysecure.keychain.ui.LogDisplayActivity;
import org.sufficientlysecure.keychain.ui.LogDisplayFragment; import org.sufficientlysecure.keychain.ui.LogDisplayFragment;
@@ -33,8 +32,8 @@ import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener;
import org.sufficientlysecure.keychain.ui.util.Notify.Showable; import org.sufficientlysecure.keychain.ui.util.Notify.Showable;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableCache; import org.sufficientlysecure.keychain.util.ParcelableCache;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -122,7 +121,7 @@ public abstract class OperationResult implements Parcelable {
mType = type; mType = type;
mParameters = parameters; mParameters = parameters;
mIndent = indent; mIndent = indent;
Log.v(Constants.TAG, "log: " + this); Timber.v("log: " + this);
} }
/** Clones this LogEntryParcel, adding extra indent. Note that the parameter array is NOT cloned! */ /** Clones this LogEntryParcel, adding extra indent. Note that the parameter array is NOT cloned! */
@@ -206,7 +205,7 @@ public abstract class OperationResult implements Parcelable {
super(type, indent, parameters); super(type, indent, parameters);
mSubResult = subResult; mSubResult = subResult;
Log.v(Constants.TAG, "log: " + this); Timber.v("log: " + this);
} }
public SubLogEntryParcel(Parcel source) { public SubLogEntryParcel(Parcel source) {
@@ -264,7 +263,7 @@ public abstract class OperationResult implements Parcelable {
LogEntryParcel entryParcel = mLog.getLast(); LogEntryParcel entryParcel = mLog.getLast();
if (entryParcel == null) { if (entryParcel == null) {
Log.e(Constants.TAG, "Tried to show empty log!"); Timber.e("Tried to show empty log!");
return Notify.create(activity, R.string.error_empty_log, Style.ERROR); return Notify.create(activity, R.string.error_empty_log, Style.ERROR);
} }
// special case: first parameter may be a quantity // special case: first parameter may be a quantity
@@ -18,6 +18,14 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import java.io.IOException;
import java.security.PublicKey;
import java.security.interfaces.ECPublicKey;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
import org.bouncycastle.bcpg.ECDHPublicBCPGKey; import org.bouncycastle.bcpg.ECDHPublicBCPGKey;
@@ -31,18 +39,9 @@ import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
import org.bouncycastle.openpgp.operator.RFC6637Utils; import org.bouncycastle.openpgp.operator.RFC6637Utils;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter;
import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator; import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException;
import java.security.PublicKey;
import java.security.interfaces.ECPublicKey;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
/** Wrapper for a PGPPublicKey. /** Wrapper for a PGPPublicKey.
* *
@@ -185,7 +184,7 @@ public class CanonicalizedPublicKey extends UncachedPublicKey {
long seconds = getValidSeconds(); long seconds = getValidSeconds();
if (seconds > Integer.MAX_VALUE) { if (seconds > Integer.MAX_VALUE) {
Log.e(Constants.TAG, "error, expiry time too large"); Timber.e("error, expiry time too large");
return null; return null;
} }
if (seconds == 0) { if (seconds == 0) {
@@ -37,14 +37,21 @@ import org.bouncycastle.openpgp.PGPSignatureGenerator;
import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator; import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor; import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder; import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.*; import org.bouncycastle.openpgp.operator.jcajce.CachingDataDecryptorFactory;
import org.bouncycastle.openpgp.operator.jcajce.EdDsaAuthenticationContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter;
import org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder;
import org.bouncycastle.openpgp.operator.jcajce.NfcSyncPGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.SessionKeySecretKeyDecryptorBuilder;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
/** /**
@@ -204,7 +211,7 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey {
mPrivateKey = mSecretKey.extractPrivateKey(keyDecryptor); mPrivateKey = mSecretKey.extractPrivateKey(keyDecryptor);
mPrivateKeyState = PRIVATE_KEY_STATE_UNLOCKED; mPrivateKeyState = PRIVATE_KEY_STATE_UNLOCKED;
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "Error extracting private key!", e); Timber.e(e, "Error extracting private key!");
return false; return false;
} }
if (mPrivateKey == null) { if (mPrivateKey == null) {
@@ -241,7 +248,7 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey {
signatureGenerator.init(PGPSignature.DEFAULT_CERTIFICATION, mPrivateKey); signatureGenerator.init(PGPSignature.DEFAULT_CERTIFICATION, mPrivateKey);
return signatureGenerator; return signatureGenerator;
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "signing error", e); Timber.e(e, "signing error");
return null; return null;
} }
} }
@@ -17,19 +17,19 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import org.bouncycastle.openpgp.PGPKeyRing; import org.bouncycastle.openpgp.PGPKeyRing;
import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKey;
import org.bouncycastle.openpgp.PGPSecretKey; import org.bouncycastle.openpgp.PGPSecretKey;
import org.bouncycastle.openpgp.PGPSecretKeyRing; import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.bouncycastle.openpgp.PGPSignature; import org.bouncycastle.openpgp.PGPSignature;
import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory; import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing { public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing {
@@ -47,10 +47,10 @@ public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing {
PGPKeyRing keyRing = null; PGPKeyRing keyRing = null;
try { try {
if ((keyRing = (PGPKeyRing) factory.nextObject()) == null) { if ((keyRing = (PGPKeyRing) factory.nextObject()) == null) {
Log.e(Constants.TAG, "No keys given!"); Timber.e("No keys given!");
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error while converting to PGPKeyRing!", e); Timber.e(e, "Error while converting to PGPKeyRing!");
} }
mRing = (PGPSecretKeyRing) keyRing; mRing = (PGPSecretKeyRing) keyRing;
@@ -18,8 +18,8 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import org.openintents.openpgp.OpenPgpDecryptionResult; import org.openintents.openpgp.OpenPgpDecryptionResult;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
class OpenPgpDecryptionResultBuilder { class OpenPgpDecryptionResultBuilder {
@@ -39,16 +39,16 @@ class OpenPgpDecryptionResultBuilder {
public OpenPgpDecryptionResult build() { public OpenPgpDecryptionResult build() {
if (isInsecure) { if (isInsecure) {
Log.d(Constants.TAG, "RESULT_INSECURE"); Timber.d("RESULT_INSECURE");
return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_INSECURE, sessionKey, decryptedSessionKey); return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_INSECURE, sessionKey, decryptedSessionKey);
} }
if (isEncrypted) { if (isEncrypted) {
Log.d(Constants.TAG, "RESULT_ENCRYPTED"); Timber.d("RESULT_ENCRYPTED");
return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_ENCRYPTED, sessionKey, decryptedSessionKey); return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_ENCRYPTED, sessionKey, decryptedSessionKey);
} }
Log.d(Constants.TAG, "RESULT_NOT_ENCRYPTED"); Timber.d("RESULT_NOT_ENCRYPTED");
return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_NOT_ENCRYPTED); return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_NOT_ENCRYPTED);
} }
@@ -25,11 +25,11 @@ import org.openintents.openpgp.OpenPgpSignatureResult;
import org.openintents.openpgp.OpenPgpSignatureResult.SenderStatusResult; import org.openintents.openpgp.OpenPgpSignatureResult.SenderStatusResult;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.openintents.openpgp.util.OpenPgpUtils.UserId; import org.openintents.openpgp.util.OpenPgpUtils.UserId;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException; import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
* This class can be used to build OpenPgpSignatureResult objects based on several checks. * This class can be used to build OpenPgpSignatureResult objects based on several checks.
@@ -121,7 +121,7 @@ public class OpenPgpSignatureResultBuilder {
try { try {
setPrimaryUserId(signingRing.getPrimaryUserIdWithFallback()); setPrimaryUserId(signingRing.getPrimaryUserIdWithFallback());
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.d(Constants.TAG, "No primary user id in keyring with master key id " + signingRing.getMasterKeyId()); Timber.d("No primary user id in keyring with master key id " + signingRing.getMasterKeyId());
} }
setSignatureKeyCertified(signingRing.getVerified() > 0); setSignatureKeyCertified(signingRing.getVerified() > 0);
@@ -168,35 +168,35 @@ public class OpenPgpSignatureResultBuilder {
public OpenPgpSignatureResult build() { public OpenPgpSignatureResult build() {
if (!mSignatureAvailable) { if (!mSignatureAvailable) {
Log.d(Constants.TAG, "RESULT_NO_SIGNATURE"); Timber.d("RESULT_NO_SIGNATURE");
return OpenPgpSignatureResult.createWithNoSignature(); return OpenPgpSignatureResult.createWithNoSignature();
} }
if (!mKnownKey) { if (!mKnownKey) {
Log.d(Constants.TAG, "RESULT_KEY_MISSING"); Timber.d("RESULT_KEY_MISSING");
return OpenPgpSignatureResult.createWithKeyMissing(mKeyId, mSignatureTimestamp); return OpenPgpSignatureResult.createWithKeyMissing(mKeyId, mSignatureTimestamp);
} }
if (!mValidSignature) { if (!mValidSignature) {
Log.d(Constants.TAG, "RESULT_INVALID_SIGNATURE"); Timber.d("RESULT_INVALID_SIGNATURE");
return OpenPgpSignatureResult.createWithInvalidSignature(); return OpenPgpSignatureResult.createWithInvalidSignature();
} }
int signatureStatus; int signatureStatus;
if (mIsKeyRevoked) { if (mIsKeyRevoked) {
Log.d(Constants.TAG, "RESULT_INVALID_KEY_REVOKED"); Timber.d("RESULT_INVALID_KEY_REVOKED");
signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_REVOKED; signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_REVOKED;
} else if (mIsKeyExpired) { } else if (mIsKeyExpired) {
Log.d(Constants.TAG, "RESULT_INVALID_KEY_EXPIRED"); Timber.d("RESULT_INVALID_KEY_EXPIRED");
signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_EXPIRED; signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_EXPIRED;
} else if (mInsecure) { } else if (mInsecure) {
Log.d(Constants.TAG, "RESULT_INVALID_INSECURE"); Timber.d("RESULT_INVALID_INSECURE");
signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_INSECURE; signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_INSECURE;
} else if (mIsSignatureKeyCertified) { } else if (mIsSignatureKeyCertified) {
Log.d(Constants.TAG, "RESULT_VALID_CONFIRMED"); Timber.d("RESULT_VALID_CONFIRMED");
signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_CONFIRMED; signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_CONFIRMED;
} else { } else {
Log.d(Constants.TAG, "RESULT_VALID_UNCONFIRMED"); Timber.d("RESULT_VALID_UNCONFIRMED");
signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_UNCONFIRMED; signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_UNCONFIRMED;
} }
@@ -32,14 +32,13 @@ import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
import org.bouncycastle.openpgp.PGPSignatureSubpacketVector; import org.bouncycastle.openpgp.PGPSignatureSubpacketVector;
import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector; import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector;
import org.bouncycastle.openpgp.operator.jcajce.NfcSyncPGPContentSignerBuilder.NfcInteractionNeeded; import org.bouncycastle.openpgp.operator.jcajce.NfcSyncPGPContentSignerBuilder.NfcInteractionNeeded;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction; import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class PgpCertifyOperation { public class PgpCertifyOperation {
@@ -67,7 +66,7 @@ public class PgpCertifyOperation {
PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator(); PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator();
if (creationTimestamp != null) { if (creationTimestamp != null) {
spGen.setSignatureCreationTime(false, creationTimestamp); spGen.setSignatureCreationTime(false, creationTimestamp);
Log.d(Constants.TAG, "For NFC: set sig creation time to " + creationTimestamp); Timber.d("For NFC: set sig creation time to " + creationTimestamp);
} }
PGPSignatureSubpacketVector packetVector = spGen.generate(); PGPSignatureSubpacketVector packetVector = spGen.generate();
signatureGenerator.setHashedSubpackets(packetVector); signatureGenerator.setHashedSubpackets(packetVector);
@@ -115,7 +114,7 @@ public class PgpCertifyOperation {
} }
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "signing error", e); Timber.e(e, "signing error");
return new PgpCertifyResult(); return new PgpCertifyResult();
} }
@@ -83,9 +83,12 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.CharsetVerifier; import org.sufficientlysecure.keychain.util.CharsetVerifier;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
import static java.lang.String.format;
public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInputParcel> { public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInputParcel> {
@@ -112,7 +115,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
long inputSize = FileHelper.getFileSize(mContext, input.getInputUri(), 0); long inputSize = FileHelper.getFileSize(mContext, input.getInputUri(), 0);
inputData = new InputData(inputStream, inputSize); inputData = new InputData(inputStream, inputSize);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.e(Constants.TAG, "Input URI could not be opened: " + input.getInputUri(), e); Timber.e(e, "Input URI could not be opened: " + input.getInputUri());
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_INPUT, 1); log.add(LogType.MSG_DC_ERROR_INPUT, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
@@ -125,7 +128,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
try { try {
outputStream = mContext.getContentResolver().openOutputStream(input.getOutputUri()); outputStream = mContext.getContentResolver().openOutputStream(input.getOutputUri());
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.e(Constants.TAG, "Output URI could not be opened: " + input.getOutputUri(), e); Timber.e(e, "Output URI could not be opened: " + input.getOutputUri());
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_IO, 1); log.add(LogType.MSG_DC_ERROR_IO, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
@@ -139,7 +142,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
} }
result.mOperationTime = System.currentTimeMillis() - startTime; result.mOperationTime = System.currentTimeMillis() - startTime;
Log.d(Constants.TAG, "total time taken: " + String.format("%.2f", result.mOperationTime / 1000.0) + "s"); Timber.d("total time taken: " + format("%.2f", result.mOperationTime / 1000.0) + "s");
return result; return result;
} }
@@ -155,7 +158,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
InputData inputData, OutputStream outputStream) { InputData inputData, OutputStream outputStream) {
try { try {
if (input.getDetachedSignature() != null) { if (input.getDetachedSignature() != null) {
Log.d(Constants.TAG, "Detached signature present, verifying with this signature only"); Timber.d("Detached signature present, verifying with this signature only");
return verifyDetachedSignature(input, inputData, outputStream, 0); return verifyDetachedSignature(input, inputData, outputStream, 0);
} else { } else {
@@ -165,7 +168,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
if (inputStream instanceof ArmoredInputStream) { if (inputStream instanceof ArmoredInputStream) {
ArmoredInputStream aIn = (ArmoredInputStream) inputStream; ArmoredInputStream aIn = (ArmoredInputStream) inputStream;
// it is ascii armored // it is ascii armored
Log.d(Constants.TAG, "ASCII Armor Header Line: " + aIn.getArmorHeaderLine()); Timber.d("ASCII Armor Header Line: " + aIn.getArmorHeaderLine());
if (aIn.isClearText()) { if (aIn.isClearText()) {
// a cleartext signature, verify it with the other method // a cleartext signature, verify it with the other method
@@ -179,19 +182,19 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
} }
} }
} catch (PGPException e) { } catch (PGPException e) {
Log.d(Constants.TAG, "PGPException", e); Timber.d(e, "PGPException");
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_PGP_EXCEPTION, 1); log.add(LogType.MSG_DC_ERROR_PGP_EXCEPTION, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
} catch (DecoderException | ArrayIndexOutOfBoundsException e) { } catch (DecoderException | ArrayIndexOutOfBoundsException e) {
// these can happen if assumptions in JcaPGPObjectFactory.nextObject() aren't // these can happen if assumptions in JcaPGPObjectFactory.nextObject() aren't
// fulfilled, so we need to catch them here to handle this gracefully // fulfilled, so we need to catch them here to handle this gracefully
Log.d(Constants.TAG, "data error", e); Timber.d(e, "data error");
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_IO, 1); log.add(LogType.MSG_DC_ERROR_IO, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
} catch (IOException e) { } catch (IOException e) {
Log.d(Constants.TAG, "IOException", e); Timber.d(e, "IOException");
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_IO, 1); log.add(LogType.MSG_DC_ERROR_IO, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
@@ -504,7 +507,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
} }
opTime = System.currentTimeMillis()-startTime; opTime = System.currentTimeMillis()-startTime;
Log.d(Constants.TAG, "decrypt time taken: " + String.format("%.2f", opTime / 1000.0) + "s, for " Timber.d("decrypt time taken: " + format("%.2f", opTime / 1000.0) + "s, for "
+ alreadyWritten + " bytes"); + alreadyWritten + " bytes");
// special treatment to detect pgp mime types // special treatment to detect pgp mime types
@@ -522,7 +525,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
alreadyWritten, charsetVerifier.getCharset()); alreadyWritten, charsetVerifier.getCharset());
log.add(LogType.MSG_DC_CLEAR_META_MIME, indent + 1, mimeType); log.add(LogType.MSG_DC_CLEAR_META_MIME, indent + 1, mimeType);
Log.d(Constants.TAG, metadata.toString()); Timber.d(metadata.toString());
indent -= 1; indent -= 1;
@@ -613,9 +616,9 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
// allow only specific keys for decryption? // allow only specific keys for decryption?
if (input.getAllowedKeyIds() != null) { if (input.getAllowedKeyIds() != null) {
Log.d(Constants.TAG, "encData.getKeyID(): " + subKeyId); Timber.d("encData.getKeyID(): " + subKeyId);
Log.d(Constants.TAG, "mAllowedKeyIds: " + input.getAllowedKeyIds()); Timber.d("mAllowedKeyIds: " + input.getAllowedKeyIds());
Log.d(Constants.TAG, "masterKeyId: " + masterKeyId); Timber.d("masterKeyId: " + masterKeyId);
if (!input.getAllowedKeyIds().contains(masterKeyId)) { if (!input.getAllowedKeyIds().contains(masterKeyId)) {
// this key is in our db, but NOT allowed! // this key is in our db, but NOT allowed!
@@ -913,7 +916,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
signatureChecker.verifySignature(log, indent); signatureChecker.verifySignature(log, indent);
} catch (SignatureException e) { } catch (SignatureException e) {
Log.d(Constants.TAG, "SignatureException", e); Timber.d(e, "SignatureException");
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
} }
} }
@@ -27,8 +27,8 @@ import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.text.TextUtils; import android.text.TextUtils;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
public class PgpHelper { public class PgpHelper {
@@ -84,14 +84,14 @@ public class PgpHelper {
} }
public static String getPgpMessageContent(@NonNull CharSequence input) { public static String getPgpMessageContent(@NonNull CharSequence input) {
Log.dEscaped(Constants.TAG, "input: " + input); Timber.d("input: %s");
Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(input); Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(input);
if (matcher.matches()) { if (matcher.matches()) {
String text = matcher.group(1); String text = matcher.group(1);
text = fixPgpMessage(text); text = fixPgpMessage(text);
Log.dEscaped(Constants.TAG, "input fixed: " + text); Timber.d("input fixed: %s", text);
return text; return text;
} else { } else {
matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(input); matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(input);
@@ -99,7 +99,7 @@ public class PgpHelper {
String text = matcher.group(1); String text = matcher.group(1);
text = fixPgpCleartextSignature(text); text = fixPgpCleartextSignature(text);
Log.dEscaped(Constants.TAG, "input fixed: " + text); Timber.d("input fixed: %s", text);
return text; return text;
} else { } else {
return null; return null;
@@ -108,7 +108,7 @@ public class PgpHelper {
} }
public static String getPgpPublicKeyContent(@NonNull CharSequence input) { public static String getPgpPublicKeyContent(@NonNull CharSequence input) {
Log.dEscaped(Constants.TAG, "input: " + input); Timber.d("input: %s", input);
Matcher matcher = PgpHelper.PGP_PUBLIC_KEY.matcher(input); Matcher matcher = PgpHelper.PGP_PUBLIC_KEY.matcher(input);
if (!matcher.matches()) { if (!matcher.matches()) {
@@ -165,7 +165,7 @@ public class PgpHelper {
Matcher matcher = KEYDATA_START_PATTERN.matcher(text); Matcher matcher = KEYDATA_START_PATTERN.matcher(text);
if (!matcher.find()) { if (!matcher.find()) {
Log.e(Constants.TAG, "Could not find start of key data!"); Timber.e("Could not find start of key data!");
break; break;
} }
int indexOfPubkeyMaterial = matcher.start(1); int indexOfPubkeyMaterial = matcher.start(1);
@@ -90,10 +90,11 @@ import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.Securit
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Primes; import org.sufficientlysecure.keychain.util.Primes;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
/** /**
* This class is the single place where ALL operations that actually modify a PGP public or secret * This class is the single place where ALL operations that actually modify a PGP public or secret
@@ -286,7 +287,7 @@ public class PgpKeyOperation {
log.add(LogType.MSG_CR_ERROR_UNKNOWN_ALGO, indent); log.add(LogType.MSG_CR_ERROR_UNKNOWN_ALGO, indent);
return null; return null;
} catch(PGPException e) { } catch(PGPException e) {
Log.e(Constants.TAG, "internal pgp error", e); Timber.e(e, "internal pgp error");
log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent); log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent);
return null; return null;
} }
@@ -364,10 +365,10 @@ public class PgpKeyOperation {
} catch (PGPException e) { } catch (PGPException e) {
log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent); log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent);
Log.e(Constants.TAG, "pgp error encoding key", e); Timber.e(e, "pgp error encoding key");
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error encoding key", e); Timber.e(e, "io error encoding key");
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} }
@@ -1137,15 +1138,15 @@ public class PgpKeyOperation {
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "encountered IOException while modifying key", e); Timber.e(e, "encountered IOException while modifying key");
log.add(LogType.MSG_MF_ERROR_ENCODE, indent+1); log.add(LogType.MSG_MF_ERROR_ENCODE, indent+1);
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "encountered pgp error while modifying key", e); Timber.e(e, "encountered pgp error while modifying key");
log.add(LogType.MSG_MF_ERROR_PGP, indent+1); log.add(LogType.MSG_MF_ERROR_PGP, indent+1);
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} catch (SignatureException e) { } catch (SignatureException e) {
Log.e(Constants.TAG, "encountered SignatureException while modifying key", e); Timber.e(e, "encountered SignatureException while modifying key");
log.add(LogType.MSG_MF_ERROR_SIG, indent+1); log.add(LogType.MSG_MF_ERROR_SIG, indent+1);
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} }
@@ -72,9 +72,12 @@ import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
import static java.lang.String.format;
/** /**
* This class supports a single, low-level, sign/encrypt operation. * This class supports a single, low-level, sign/encrypt operation.
@@ -98,7 +101,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
try { try {
NEW_LINE = "\r\n".getBytes("UTF-8"); NEW_LINE = "\r\n".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
Log.e(Constants.TAG, "UnsupportedEncodingException", e); Timber.e(e, "UnsupportedEncodingException");
} }
} }
@@ -186,7 +189,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
compressionAlgorithm = PgpSecurityConstants.DEFAULT_COMPRESSION_ALGORITHM; compressionAlgorithm = PgpSecurityConstants.DEFAULT_COMPRESSION_ALGORITHM;
} }
Log.d(Constants.TAG, data.toString()); Timber.d(data.toString());
ArmoredOutputStream armorOut = null; ArmoredOutputStream armorOut = null;
OutputStream out; OutputStream out;
@@ -576,7 +579,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
} }
opTime = System.currentTimeMillis() - startTime; opTime = System.currentTimeMillis() - startTime;
Log.d(Constants.TAG, "sign/encrypt time taken: " + String.format("%.2f", opTime / 1000.0) + "s"); Timber.d("sign/encrypt time taken: " + format("%.2f", opTime / 1000.0) + "s");
// closing outputs // closing outputs
// NOTE: closing needs to be done in the correct order! // NOTE: closing needs to be done in the correct order!
@@ -635,7 +638,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
// construct micalg parameter according to https://tools.ietf.org/html/rfc3156#section-5 // construct micalg parameter according to https://tools.ietf.org/html/rfc3156#section-5
result.setMicAlgDigestName("pgp-" + digestName.toLowerCase()); result.setMicAlgDigestName("pgp-" + digestName.toLowerCase());
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "error setting micalg parameter!", e); Timber.e(e, "error setting micalg parameter!");
} }
} }
return result; return result;
@@ -41,7 +41,7 @@ import org.sufficientlysecure.keychain.pgp.SecurityProblem.KeySecurityProblem;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** This class is used to track the state of a single signature verification. /** This class is used to track the state of a single signature verification.
@@ -172,7 +172,7 @@ class PgpSignatureChecker {
onePassSignature = sigList.get(i); onePassSignature = sigList.get(i);
return; return;
} catch (KeyWritableRepository.NotFoundException e) { } catch (KeyWritableRepository.NotFoundException e) {
Log.d(Constants.TAG, "key not found, trying next signature..."); Timber.d("key not found, trying next signature...");
} }
} }
} }
@@ -195,7 +195,7 @@ class PgpSignatureChecker {
signature = sigList.get(i); signature = sigList.get(i);
return; return;
} catch (KeyWritableRepository.NotFoundException e) { } catch (KeyWritableRepository.NotFoundException e) {
Log.d(Constants.TAG, "key not found, trying next signature..."); Timber.d("key not found, trying next signature...");
} }
} }
} }
@@ -67,8 +67,9 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult.Operat
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Utf8Util; import org.sufficientlysecure.keychain.util.Utf8Util;
import timber.log.Timber;
/** Wrapper around PGPKeyRing class, to be constructed from bytes. /** Wrapper around PGPKeyRing class, to be constructed from bytes.
* *
@@ -217,10 +218,9 @@ public class UncachedKeyRing {
// go through all objects in this block // go through all objects in this block
Object obj; Object obj;
while ((obj = mObjectFactory.nextObject()) != null) { while ((obj = mObjectFactory.nextObject()) != null) {
Log.d(Constants.TAG, "Found class: " + obj.getClass()); Timber.d("Found class: " + obj.getClass());
if (!(obj instanceof PGPKeyRing)) { if (!(obj instanceof PGPKeyRing)) {
Log.i(Constants.TAG, Timber.i("Skipping object of bad type " + obj.getClass().getName() + " in stream");
"Skipping object of bad type " + obj.getClass().getName() + " in stream");
// skip object // skip object
continue; continue;
} }
@@ -17,6 +17,14 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import org.bouncycastle.bcpg.ECPublicBCPGKey; import org.bouncycastle.bcpg.ECPublicBCPGKey;
import org.bouncycastle.bcpg.SignatureSubpacketTags; import org.bouncycastle.bcpg.SignatureSubpacketTags;
import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKey;
@@ -26,15 +34,8 @@ import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Utf8Util; import org.sufficientlysecure.keychain.util.Utf8Util;
import timber.log.Timber;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
public class UncachedPublicKey { public class UncachedPublicKey {
protected final PGPPublicKey mPublicKey; protected final PGPPublicKey mPublicKey;
@@ -374,7 +375,7 @@ public class UncachedPublicKey {
long valid = mPublicKey.getValidSeconds(); long valid = mPublicKey.getValidSeconds();
if (valid > Integer.MAX_VALUE) { if (valid > Integer.MAX_VALUE) {
Log.e(Constants.TAG, "error, expiry time too large"); Timber.e("error, expiry time too large");
return null; return null;
} }
if (valid == 0) { if (valid == 0) {
@@ -33,7 +33,7 @@ import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -103,7 +103,7 @@ public class WrappedSignature {
} }
} catch (PGPException e) { } catch (PGPException e) {
// no matter // no matter
Log.e(Constants.TAG, "exception reading embedded signatures", e); Timber.e(e, "exception reading embedded signatures");
} }
return sigs; return sigs;
} }
@@ -229,11 +229,11 @@ public class WrappedSignature {
PGPSignatureList signatures = null; PGPSignatureList signatures = null;
try { try {
if ((signatures = (PGPSignatureList) factory.nextObject()) == null || signatures.isEmpty()) { if ((signatures = (PGPSignatureList) factory.nextObject()) == null || signatures.isEmpty()) {
Log.e(Constants.TAG, "No signatures given!"); Timber.e("No signatures given!");
return null; return null;
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error while converting to PGPSignature!", e); Timber.e(e, "Error while converting to PGPSignature!");
return null; return null;
} }
@@ -20,14 +20,14 @@ package org.sufficientlysecure.keychain.provider;
import android.net.Uri; import android.net.Uri;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException; import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainContract.Keys; import org.sufficientlysecure.keychain.provider.KeychainContract.Keys;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** This implementation of KeyRing provides a cached view of PublicKeyRing /** This implementation of KeyRing provides a cached view of PublicKeyRing
* objects based on database queries exclusively. * objects based on database queries exclusively.
@@ -77,7 +77,7 @@ public class CachedPublicKeyRing extends KeyRing {
return Long.parseLong(firstSegment); return Long.parseLong(firstSegment);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
// didn't work? oh well. // didn't work? oh well.
Log.d(Constants.TAG, "Couldn't get masterKeyId from URI, querying..."); Timber.d("Couldn't get masterKeyId from URI, querying...");
} }
return getMasterKeyId(); return getMasterKeyId();
} }
@@ -28,10 +28,8 @@ import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Log;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing;
@@ -43,6 +41,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRingData;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys; import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import timber.log.Timber;
public class KeyRepository { public class KeyRepository {
@@ -339,7 +338,7 @@ public class KeyRepository {
try { try {
data = mLocalPublicKeyStorage.readPublicKey(masterKeyId); data = mLocalPublicKeyStorage.readPublicKey(masterKeyId);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error reading public key from storage!", e); Timber.e(e, "Error reading public key from storage!");
throw new NotFoundException(); throw new NotFoundException();
} }
} }
@@ -38,7 +38,6 @@ import android.support.annotation.VisibleForTesting;
import android.support.v4.util.LongSparseArray; import android.support.v4.util.LongSparseArray;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
@@ -67,9 +66,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.Utf8Util; import org.sufficientlysecure.keychain.util.Utf8Util;
import timber.log.Timber;
/** /**
* This class contains high level methods for database access. Despite its * This class contains high level methods for database access. Despite its
@@ -514,7 +514,7 @@ public class KeyWritableRepository extends KeyRepository {
} catch (IOException e) { } catch (IOException e) {
log(LogType.MSG_IP_ERROR_IO_EXC); log(LogType.MSG_IP_ERROR_IO_EXC);
Log.e(Constants.TAG, "IOException during import", e); Timber.e(e, "IOException during import");
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} finally { } finally {
mIndent -= 1; mIndent -= 1;
@@ -544,11 +544,11 @@ public class KeyWritableRepository extends KeyRepository {
} catch (RemoteException e) { } catch (RemoteException e) {
log(LogType.MSG_IP_ERROR_REMOTE_EX); log(LogType.MSG_IP_ERROR_REMOTE_EX);
Log.e(Constants.TAG, "RemoteException during import", e); Timber.e(e, "RemoteException during import");
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} catch (OperationApplicationException e) { } catch (OperationApplicationException e) {
log(LogType.MSG_IP_ERROR_OP_EXC); log(LogType.MSG_IP_ERROR_OP_EXC);
Log.e(Constants.TAG, "OperationApplicationException during import", e); Timber.e(e, "OperationApplicationException during import");
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} }
@@ -602,7 +602,7 @@ public class KeyWritableRepository extends KeyRepository {
try { try {
mLocalPublicKeyStorage.deletePublicKey(masterKeyId); mLocalPublicKeyStorage.deletePublicKey(masterKeyId);
} catch (IOException e) { } catch (IOException e) {
android.util.Log.e(Constants.TAG, "Could not delete file!", e); Timber.e(e, "Could not delete file!");
return false; return false;
} }
mContentResolver.delete(ApiAutocryptPeer.buildByMasterKeyId(masterKeyId),null, null); mContentResolver.delete(ApiAutocryptPeer.buildByMasterKeyId(masterKeyId),null, null);
@@ -671,7 +671,7 @@ public class KeyWritableRepository extends KeyRepository {
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Failed to encode key!", e); Timber.e(e, "Failed to encode key!");
log(LogType.MSG_IS_ERROR_IO_EXC); log(LogType.MSG_IS_ERROR_IO_EXC);
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} }
@@ -1068,7 +1068,7 @@ public class KeyWritableRepository extends KeyRepository {
log.add(result, 1); log.add(result, 1);
progress.setProgress(processedKeys++, totalKeys); progress.setProgress(processedKeys++, totalKeys);
} catch (NotFoundException | PgpGeneralException | IOException e) { } catch (NotFoundException | PgpGeneralException | IOException e) {
Log.e(Constants.TAG, "Error updating trust database", e); Timber.e(e, "Error updating trust database");
return new UpdateTrustResult(UpdateTrustResult.RESULT_ERROR, log); return new UpdateTrustResult(UpdateTrustResult.RESULT_ERROR, log);
} }
} }
@@ -40,8 +40,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeysColumns;
import org.sufficientlysecure.keychain.provider.KeychainContract.OverriddenWarnings; import org.sufficientlysecure.keychain.provider.KeychainContract.OverriddenWarnings;
import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeysColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeysColumns;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
/** /**
@@ -215,7 +215,7 @@ public class KeychainDatabase extends SQLiteOpenHelper {
@Override @Override
public void onCreate(SQLiteDatabase db) { public void onCreate(SQLiteDatabase db) {
Log.w(Constants.TAG, "Creating database..."); Timber.w("Creating database...");
db.execSQL(CREATE_KEYRINGS_PUBLIC); db.execSQL(CREATE_KEYRINGS_PUBLIC);
db.execSQL(CREATE_KEYRINGS_SECRET); db.execSQL(CREATE_KEYRINGS_SECRET);
@@ -249,7 +249,7 @@ public class KeychainDatabase extends SQLiteOpenHelper {
@Override @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(Constants.TAG, "Upgrading db from " + oldVersion + " to " + newVersion); Timber.d("Upgrading db from " + oldVersion + " to " + newVersion);
switch (oldVersion) { switch (oldVersion) {
case 1: case 1:
@@ -50,7 +50,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns;
import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables; import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import static android.database.DatabaseUtils.dumpCursorToString;
public class KeychainProvider extends ContentProvider { public class KeychainProvider extends ContentProvider {
@@ -296,7 +299,7 @@ public class KeychainProvider extends ContentProvider {
@Override @Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) { String sortOrder) {
Log.v(Constants.TAG, "query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")"); Timber.v("query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")");
SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
@@ -457,7 +460,7 @@ public class KeychainProvider extends ContentProvider {
+ " AND tmp." + Keys.KEY_ID + " = " + subkey + "" + " AND tmp." + Keys.KEY_ID + " = " + subkey + ""
+ ")"); + ")");
} catch(NumberFormatException e) { } catch(NumberFormatException e) {
Log.e(Constants.TAG, "Malformed find by subkey query!", e); Timber.e(e, "Malformed find by subkey query!");
qb.appendWhere(" AND 0"); qb.appendWhere(" AND 0");
} }
break; break;
@@ -510,7 +513,7 @@ public class KeychainProvider extends ContentProvider {
+ ")"); + ")");
} else { } else {
// TODO better way to do this? // TODO better way to do this?
Log.e(Constants.TAG, "Malformed find by email query!"); Timber.e("Malformed find by email query!");
qb.appendWhere(" AND 0"); qb.appendWhere(" AND 0");
} }
break; break;
@@ -795,11 +798,10 @@ public class KeychainProvider extends ContentProvider {
cursor.setNotificationUri(getContext().getContentResolver(), uri); cursor.setNotificationUri(getContext().getContentResolver(), uri);
} }
Log.d(Constants.TAG, Timber.d("Query: " + qb.buildQuery(projection, selection, null, null, orderBy, null));
"Query: " + qb.buildQuery(projection, selection, null, null, orderBy, null));
if (Constants.DEBUG && Constants.DEBUG_LOG_DB_QUERIES) { if (Constants.DEBUG && Constants.DEBUG_LOG_DB_QUERIES) {
Log.d(Constants.TAG, "Cursor: " + DatabaseUtils.dumpCursorToString(cursor)); Timber.d("Cursor: " + dumpCursorToString(cursor));
} }
if (Constants.DEBUG && Constants.DEBUG_EXPLAIN_QUERIES) { if (Constants.DEBUG && Constants.DEBUG_EXPLAIN_QUERIES) {
@@ -813,14 +815,14 @@ public class KeychainProvider extends ContentProvider {
for (int i = 0; i < explainCursor.getColumnCount(); i++) { for (int i = 0; i < explainCursor.getColumnCount(); i++) {
line.append(explainCursor.getColumnName(i)).append(", "); line.append(explainCursor.getColumnName(i)).append(", ");
} }
Log.d(Constants.TAG, line.toString()); Timber.d(line.toString());
while (!explainCursor.isAfterLast()) { while (!explainCursor.isAfterLast()) {
line = new StringBuilder(); line = new StringBuilder();
for (int i = 0; i < explainCursor.getColumnCount(); i++) { for (int i = 0; i < explainCursor.getColumnCount(); i++) {
line.append(explainCursor.getString(i)).append(", "); line.append(explainCursor.getString(i)).append(", ");
} }
Log.d(Constants.TAG, line.toString()); Timber.d(line.toString());
explainCursor.moveToNext(); explainCursor.moveToNext();
} }
@@ -835,7 +837,7 @@ public class KeychainProvider extends ContentProvider {
*/ */
@Override @Override
public Uri insert(Uri uri, ContentValues values) { public Uri insert(Uri uri, ContentValues values) {
Log.d(Constants.TAG, "insert(uri=" + uri + ", values=" + values.toString() + ")"); Timber.d("insert(uri=" + uri + ", values=" + values.toString() + ")");
final SQLiteDatabase db = getDb().getWritableDatabase(); final SQLiteDatabase db = getDb().getWritableDatabase();
@@ -925,7 +927,7 @@ public class KeychainProvider extends ContentProvider {
getContext().getContentResolver().notifyChange(uri, null); getContext().getContentResolver().notifyChange(uri, null);
} catch (SQLiteConstraintException e) { } catch (SQLiteConstraintException e) {
Log.d(Constants.TAG, "Constraint exception on insert! Entry already existing?", e); Timber.d(e, "Constraint exception on insert! Entry already existing?");
} }
return rowUri; return rowUri;
@@ -936,7 +938,7 @@ public class KeychainProvider extends ContentProvider {
*/ */
@Override @Override
public int delete(Uri uri, String additionalSelection, String[] selectionArgs) { public int delete(Uri uri, String additionalSelection, String[] selectionArgs) {
Log.v(Constants.TAG, "delete(uri=" + uri + ")"); Timber.v("delete(uri=" + uri + ")");
final SQLiteDatabase db = getDb().getWritableDatabase(); final SQLiteDatabase db = getDb().getWritableDatabase();
@@ -1028,7 +1030,7 @@ public class KeychainProvider extends ContentProvider {
*/ */
@Override @Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
Log.v(Constants.TAG, "update(uri=" + uri + ", values=" + values.toString() + ")"); Timber.v("update(uri=" + uri + ", values=" + values.toString() + ")");
final SQLiteDatabase db = getDb().getWritableDatabase(); final SQLiteDatabase db = getDb().getWritableDatabase();
ContentResolver contentResolver = getContext().getContentResolver(); ContentResolver contentResolver = getContext().getContentResolver();
@@ -1109,7 +1111,7 @@ public class KeychainProvider extends ContentProvider {
contentResolver.notifyChange(uri, null); contentResolver.notifyChange(uri, null);
} catch (SQLiteConstraintException e) { } catch (SQLiteConstraintException e) {
Log.d(Constants.TAG, "Constraint exception on update! Entry already existing?", e); Timber.d(e, "Constraint exception on update! Entry already existing?");
} }
return count; return count;
@@ -32,7 +32,7 @@ import android.provider.MediaStore;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.DatabaseUtil; import org.sufficientlysecure.keychain.util.DatabaseUtil;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@@ -136,7 +136,7 @@ public class TemporaryFileProvider extends ContentProvider {
@Override @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(Constants.TAG, "Upgrading files db from " + oldVersion + " to " + newVersion); Timber.d("Upgrading files db from %s to %s", oldVersion, newVersion);
switch (oldVersion) { switch (oldVersion) {
case 1: case 1:
@@ -188,7 +188,7 @@ public class TemporaryFileProvider extends ContentProvider {
try { try {
file = getFile(uri); file = getFile(uri);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.e(Constants.TAG, "file not found!"); Timber.e("file not found!");
return null; return null;
} }
@@ -253,13 +253,13 @@ public class TemporaryFileProvider extends ContentProvider {
values.put(TemporaryFileColumns.COLUMN_UUID, uuid); values.put(TemporaryFileColumns.COLUMN_UUID, uuid);
int insert = (int) db.getWritableDatabase().insert(TABLE_FILES, null, values); int insert = (int) db.getWritableDatabase().insert(TABLE_FILES, null, values);
if (insert == -1) { if (insert == -1) {
Log.e(Constants.TAG, "Insert failed!"); Timber.e("Insert failed!");
return null; return null;
} }
try { try {
getFile(uuid).createNewFile(); getFile(uuid).createNewFile();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "File creation failed!"); Timber.e("File creation failed!");
return null; return null;
} }
return Uri.withAppendedPath(CONTENT_URI, uuid); return Uri.withAppendedPath(CONTENT_URI, uuid);
@@ -34,10 +34,9 @@ import android.os.Binder;
import org.openintents.openpgp.OpenPgpError; import org.openintents.openpgp.OpenPgpError;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
@@ -86,13 +85,13 @@ public class ApiPermissionHelper {
return null; return null;
} else { } else {
String packageName = getCurrentCallingPackage(); String packageName = getCurrentCallingPackage();
Log.d(Constants.TAG, "isAllowed packageName: " + packageName); Timber.d("isAllowed packageName: " + packageName);
byte[] packageCertificate; byte[] packageCertificate;
try { try {
packageCertificate = getPackageCertificate(packageName); packageCertificate = getPackageCertificate(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Should not happen, returning!", e); Timber.e(e, "Should not happen, returning!");
// return error // return error
Intent result = new Intent(); Intent result = new Intent();
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR);
@@ -100,7 +99,7 @@ public class ApiPermissionHelper {
new OpenPgpError(OpenPgpError.GENERIC_ERROR, e.getMessage())); new OpenPgpError(OpenPgpError.GENERIC_ERROR, e.getMessage()));
return result; return result;
} }
Log.e(Constants.TAG, "Not allowed to use service! return PendingIntent for registration!"); Timber.e("Not allowed to use service! return PendingIntent for registration!");
PendingIntent pi = piFactory.createRegisterPendingIntent(data, packageName, packageCertificate); PendingIntent pi = piFactory.createRegisterPendingIntent(data, packageName, packageCertificate);
@@ -112,7 +111,7 @@ public class ApiPermissionHelper {
return result; return result;
} }
} catch (WrongPackageCertificateException e) { } catch (WrongPackageCertificateException e) {
Log.e(Constants.TAG, "wrong signature!", e); Timber.e(e, "wrong signature!");
PendingIntent pi = piFactory.createErrorPendingIntent(data, mContext.getString(R.string.api_error_wrong_signature)); PendingIntent pi = piFactory.createErrorPendingIntent(data, mContext.getString(R.string.api_error_wrong_signature));
@@ -159,7 +158,7 @@ public class ApiPermissionHelper {
// No plans to support sharedUserIds due to many bugs connected to them: // No plans to support sharedUserIds due to many bugs connected to them:
// http://java-hamster.blogspot.de/2010/05/androids-shareduserid.html // http://java-hamster.blogspot.de/2010/05/androids-shareduserid.html
String currentPkg = callingPackages[0]; String currentPkg = callingPackages[0];
Log.d(Constants.TAG, "currentPkg: " + currentPkg); Timber.d("currentPkg: " + currentPkg);
return currentPkg; return currentPkg;
} }
@@ -187,7 +186,7 @@ public class ApiPermissionHelper {
} }
} }
Log.e(Constants.TAG, "Uid is NOT allowed!"); Timber.e("Uid is NOT allowed!");
return false; return false;
} }
@@ -197,16 +196,16 @@ public class ApiPermissionHelper {
* @throws WrongPackageCertificateException * @throws WrongPackageCertificateException
*/ */
public boolean isPackageAllowed(String packageName) throws WrongPackageCertificateException { public boolean isPackageAllowed(String packageName) throws WrongPackageCertificateException {
Log.d(Constants.TAG, "isPackageAllowed packageName: " + packageName); Timber.d("isPackageAllowed packageName: " + packageName);
byte[] storedPackageCert = mApiDao.getApiAppCertificate(packageName); byte[] storedPackageCert = mApiDao.getApiAppCertificate(packageName);
boolean isKnownPackage = storedPackageCert != null; boolean isKnownPackage = storedPackageCert != null;
if (!isKnownPackage) { if (!isKnownPackage) {
Log.d(Constants.TAG, "Package is NOT allowed! packageName: " + packageName); Timber.d("Package is NOT allowed! packageName: " + packageName);
return false; return false;
} }
Log.d(Constants.TAG, "Package is allowed! packageName: " + packageName); Timber.d("Package is allowed! packageName: " + packageName);
byte[] currentPackageCert; byte[] currentPackageCert;
try { try {
@@ -217,7 +216,7 @@ public class ApiPermissionHelper {
boolean packageCertMatchesStored = Arrays.equals(currentPackageCert, storedPackageCert); boolean packageCertMatchesStored = Arrays.equals(currentPackageCert, storedPackageCert);
if (packageCertMatchesStored) { if (packageCertMatchesStored) {
Log.d(Constants.TAG,"Package certificate matches expected."); Timber.d("Package certificate matches expected.");
return true; return true;
} }
@@ -32,7 +32,7 @@ import android.os.RemoteException;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -158,7 +158,7 @@ public class CryptoInputParcelCacheService extends Service {
case MSG_GET_NOT_FOUND: case MSG_GET_NOT_FOUND:
throw new InputParcelNotFound(); throw new InputParcelNotFound();
default: default:
Log.e(Constants.TAG, "timeout!"); Timber.e("timeout!");
throw new InputParcelNotFound("should not happen!"); throw new InputParcelNotFound("should not happen!");
} }
} }
@@ -206,19 +206,19 @@ public class CryptoInputParcelCacheService extends Service {
try { try {
messenger.send(msg); messenger.send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "CryptoInputParcelCacheService: Sending message failed", e); Timber.e(e, "CryptoInputParcelCacheService: Sending message failed");
} }
break; break;
} }
default: { default: {
Log.e(Constants.TAG, "CryptoInputParcelCacheService: Intent or Intent Action not supported!"); Timber.e("CryptoInputParcelCacheService: Intent or Intent Action not supported!");
break; break;
} }
} }
if (mCache.size() <= 0) { if (mCache.size() <= 0) {
// stop whole service if cache is empty // stop whole service if cache is empty
Log.d(Constants.TAG, "CryptoInputParcelCacheService: No passphrases remaining in memory, stopping service!"); Timber.d("CryptoInputParcelCacheService: No passphrases remaining in memory, stopping service!");
stopSelf(); stopSelf();
} }
@@ -229,13 +229,13 @@ public class CryptoInputParcelCacheService extends Service {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
mContext = this; mContext = this;
Log.d(Constants.TAG, "CryptoInputParcelCacheService, onCreate()"); Timber.d("CryptoInputParcelCacheService, onCreate()");
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
Log.d(Constants.TAG, "CryptoInputParcelCacheService, onDestroy()"); Timber.d("CryptoInputParcelCacheService, onDestroy()");
} }
@Override @Override
@@ -54,7 +54,8 @@ import org.sufficientlysecure.keychain.provider.KeychainExternalContract.Autocry
import org.sufficientlysecure.keychain.provider.KeychainExternalContract.EmailStatus; import org.sufficientlysecure.keychain.provider.KeychainExternalContract.EmailStatus;
import org.sufficientlysecure.keychain.provider.SimpleContentResolverInterface; import org.sufficientlysecure.keychain.provider.SimpleContentResolverInterface;
import org.sufficientlysecure.keychain.util.CloseDatabaseCursorFactory; import org.sufficientlysecure.keychain.util.CloseDatabaseCursorFactory;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class KeychainExternalProvider extends ContentProvider implements SimpleContentResolverInterface { public class KeychainExternalProvider extends ContentProvider implements SimpleContentResolverInterface {
private static final int EMAIL_STATUS = 101; private static final int EMAIL_STATUS = 101;
@@ -135,7 +136,7 @@ public class KeychainExternalProvider extends ContentProvider implements SimpleC
@Override @Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) { String sortOrder) {
Log.v(Constants.TAG, "query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")"); Timber.v("query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")");
SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
@@ -349,8 +350,7 @@ public class KeychainExternalProvider extends ContentProvider implements SimpleC
} }
} }
Log.d(Constants.TAG, Timber.d("Query: " + qb.buildQuery(projection, selection, groupBy, null, orderBy, null));
"Query: " + qb.buildQuery(projection, selection, groupBy, null, orderBy, null));
return cursor; return cursor;
} }
@@ -81,8 +81,9 @@ import org.sufficientlysecure.keychain.service.BackupKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
public class OpenPgpService extends Service { public class OpenPgpService extends Service {
public static final int API_VERSION_WITH_KEY_INVALID_INSECURE = 8; public static final int API_VERSION_WITH_KEY_INVALID_INSECURE = 8;
@@ -193,7 +194,7 @@ public class OpenPgpService extends Service {
throw new Exception(getString(errorMsg.mType.getMsgId())); throw new Exception(getString(errorMsg.mType.getMsgId()));
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "signImpl", e); Timber.d(e, "signImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -296,7 +297,7 @@ public class OpenPgpService extends Service {
throw new Exception(getString(errorMsg.mType.getMsgId())); throw new Exception(getString(errorMsg.mType.getMsgId()));
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "encryptAndSignImpl", e); Timber.d(e, "encryptAndSignImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -446,7 +447,7 @@ public class OpenPgpService extends Service {
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "decryptAndVerifyImpl", e); Timber.e(e, "decryptAndVerifyImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -486,7 +487,7 @@ public class OpenPgpService extends Service {
if (autocryptPeerUpdate.hasKeyData()) { if (autocryptPeerUpdate.hasKeyData()) {
UncachedKeyRing uncachedKeyRing = UncachedKeyRing.decodeFromData(autocryptPeerUpdate.getKeyData()); UncachedKeyRing uncachedKeyRing = UncachedKeyRing.decodeFromData(autocryptPeerUpdate.getKeyData());
if (uncachedKeyRing.isSecret()) { if (uncachedKeyRing.isSecret()) {
Log.e(Constants.TAG, "Found secret key in autocrypt id! - Ignoring"); Timber.e("Found secret key in autocrypt id! - Ignoring");
return null; return null;
} }
// this will merge if the key already exists - no worries! // this will merge if the key already exists - no worries!
@@ -669,7 +670,7 @@ public class OpenPgpService extends Service {
try { try {
outputStream.close(); outputStream.close();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException when closing OutputStream", e); Timber.e(e, "IOException when closing OutputStream");
} }
} }
} }
@@ -689,7 +690,7 @@ public class OpenPgpService extends Service {
return result; return result;
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "getKeyImpl", e); Timber.d(e, "getKeyImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -776,7 +777,7 @@ public class OpenPgpService extends Service {
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, errorMsg); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, errorMsg);
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "backupImpl", e); Timber.d(e, "backupImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -797,7 +798,7 @@ public class OpenPgpService extends Service {
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
return result; return result;
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "exception in updateAutocryptPeerImpl", e); Timber.d(e, "exception in updateAutocryptPeerImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -870,7 +871,8 @@ public class OpenPgpService extends Service {
private final IOpenPgpService.Stub mBinder = new IOpenPgpService.Stub() { private final IOpenPgpService.Stub mBinder = new IOpenPgpService.Stub() {
@Override @Override
public Intent execute(Intent data, ParcelFileDescriptor input, ParcelFileDescriptor output) { public Intent execute(Intent data, ParcelFileDescriptor input, ParcelFileDescriptor output) {
Log.w(Constants.TAG, "You are using a deprecated service which may lead to truncated data on return, please use IOpenPgpService2!"); Timber.w(
"You are using a deprecated service which may lead to truncated data on return, please use IOpenPgpService2!");
return executeInternal(data, input, output); return executeInternal(data, input, output);
} }
@@ -900,14 +902,14 @@ public class OpenPgpService extends Service {
try { try {
inputStream.close(); inputStream.close();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException when closing input ParcelFileDescriptor", e); Timber.e(e, "IOException when closing input ParcelFileDescriptor");
} }
} }
if (outputStream != null) { if (outputStream != null) {
try { try {
outputStream.close(); outputStream.close();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException when closing output ParcelFileDescriptor", e); Timber.e(e, "IOException when closing output ParcelFileDescriptor");
} }
} }
} }
@@ -943,7 +945,8 @@ public class OpenPgpService extends Service {
} }
case OpenPgpApi.ACTION_SIGN: { case OpenPgpApi.ACTION_SIGN: {
// DEPRECATED: same as ACTION_CLEARTEXT_SIGN // DEPRECATED: same as ACTION_CLEARTEXT_SIGN
Log.w(Constants.TAG, "You are using a deprecated API call, please use ACTION_CLEARTEXT_SIGN instead of ACTION_SIGN!"); Timber.w(
"You are using a deprecated API call, please use ACTION_CLEARTEXT_SIGN instead of ACTION_SIGN!");
return signImpl(data, inputStream, outputStream, true); return signImpl(data, inputStream, outputStream, true);
} }
case OpenPgpApi.ACTION_DETACHED_SIGN: { case OpenPgpApi.ACTION_DETACHED_SIGN: {
@@ -23,8 +23,7 @@ import android.os.IBinder;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import org.openintents.openpgp.IOpenPgpService2; import org.openintents.openpgp.IOpenPgpService2;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
@@ -48,7 +47,7 @@ public class OpenPgpService2 extends OpenPgpService {
mOutputPipeMap.put(createKey(outputPipeId), pipe[1]); mOutputPipeMap.put(createKey(outputPipeId), pipe[1]);
return pipe[0]; return pipe[0];
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException in OpenPgpService2", e); Timber.e(e, "IOException in OpenPgpService2");
return null; return null;
} }
@@ -31,12 +31,11 @@ import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAutocryptPeer; import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAutocryptPeer;
import org.sufficientlysecure.keychain.provider.KeychainExternalContract; import org.sufficientlysecure.keychain.provider.KeychainExternalContract;
import org.sufficientlysecure.keychain.provider.KeychainExternalContract.AutocryptStatus; import org.sufficientlysecure.keychain.provider.KeychainExternalContract.AutocryptStatus;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class OpenPgpServiceKeyIdExtractor { class OpenPgpServiceKeyIdExtractor {
@@ -158,7 +157,7 @@ class OpenPgpServiceKeyIdExtractor {
} }
if (userIdEntries.size() != encryptionAddresses.length) { if (userIdEntries.size() != encryptionAddresses.length) {
Log.e(Constants.TAG, "Number of rows doesn't match number of retrieved rows! Probably a bug?"); Timber.e("Number of rows doesn't match number of retrieved rows! Probably a bug?");
} }
allKeysConfirmed = !anyKeyNotVerified; allKeysConfirmed = !anyKeyNotVerified;
@@ -48,6 +48,7 @@ import org.sufficientlysecure.keychain.ssh.AuthenticationOperation;
import org.sufficientlysecure.keychain.ssh.AuthenticationParcel; import org.sufficientlysecure.keychain.ssh.AuthenticationParcel;
import org.sufficientlysecure.keychain.ssh.AuthenticationResult; import org.sufficientlysecure.keychain.ssh.AuthenticationResult;
import org.sufficientlysecure.keychain.ssh.signature.SshSignatureConverter; import org.sufficientlysecure.keychain.ssh.signature.SshSignatureConverter;
import timber.log.Timber;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.PublicKey; import java.security.PublicKey;
@@ -412,7 +413,7 @@ public class SshAuthenticationService extends Service {
} }
private Intent createErrorResult(int errorCode, String errorMessage) { private Intent createErrorResult(int errorCode, String errorMessage) {
Log.e(TAG, errorMessage); Timber.e(errorMessage);
Intent result = new Intent(); Intent result = new Intent();
result.putExtra(SshAuthenticationApi.EXTRA_ERROR, new SshAuthenticationApiError(errorCode, errorMessage)); result.putExtra(SshAuthenticationApi.EXTRA_ERROR, new SshAuthenticationApiError(errorCode, errorMessage));
result.putExtra(SshAuthenticationApi.EXTRA_RESULT_CODE, SshAuthenticationApi.RESULT_CODE_ERROR); result.putExtra(SshAuthenticationApi.EXTRA_RESULT_CODE, SshAuthenticationApi.RESULT_CODE_ERROR);
@@ -35,7 +35,6 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
@@ -43,7 +42,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.dialog.AdvancedAppSettingsDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.AdvancedAppSettingsDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class AppSettingsActivity extends BaseActivity { public class AppSettingsActivity extends BaseActivity {
private Uri mAppUri; private Uri mAppUri;
@@ -82,12 +82,12 @@ public class AppSettingsActivity extends BaseActivity {
Intent intent = getIntent(); Intent intent = getIntent();
mAppUri = intent.getData(); mAppUri = intent.getData();
if (mAppUri == null) { if (mAppUri == null) {
Log.e(Constants.TAG, "Intent data missing. Should be Uri of app!"); Timber.e("Intent data missing. Should be Uri of app!");
finish(); finish();
return; return;
} }
Log.d(Constants.TAG, "uri: " + mAppUri); Timber.d("uri: %s", mAppUri);
loadData(savedInstanceState, mAppUri); loadData(savedInstanceState, mAppUri);
} }
@@ -142,7 +142,7 @@ public class AppSettingsActivity extends BaseActivity {
byte[] digest = md.digest(); byte[] digest = md.digest();
certificate = new String(Hex.encode(digest)); certificate = new String(Hex.encode(digest));
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
Log.e(Constants.TAG, "Should not happen!", e); Timber.e(e, "Should not happen!");
} }
AdvancedAppSettingsDialogFragment dialogFragment = AdvancedAppSettingsDialogFragment dialogFragment =
@@ -163,7 +163,7 @@ public class AppSettingsActivity extends BaseActivity {
i.addCategory(Intent.CATEGORY_LAUNCHER); i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i); startActivity(i);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.e(Constants.TAG, "startApp", e); Timber.e(e, "startApp");
} }
} }
@@ -187,7 +187,7 @@ public class AppSettingsActivity extends BaseActivity {
mAppIconView.setImageDrawable(appIcon); mAppIconView.setImageDrawable(appIcon);
Uri allowedKeysUri = appUri.buildUpon().appendPath(KeychainContract.PATH_ALLOWED_KEYS).build(); Uri allowedKeysUri = appUri.buildUpon().appendPath(KeychainContract.PATH_ALLOWED_KEYS).build();
Log.d(Constants.TAG, "allowedKeysUri: " + allowedKeysUri); Timber.d("allowedKeysUri: " + allowedKeysUri);
startListFragments(savedInstanceState, allowedKeysUri); startListFragments(savedInstanceState, allowedKeysUri);
} }
@@ -33,7 +33,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.ListFragmentWorkaround; import org.sufficientlysecure.keychain.compatibility.ListFragmentWorkaround;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
@@ -41,7 +40,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter; import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter;
import org.sufficientlysecure.keychain.ui.adapter.KeySelectableAdapter; import org.sufficientlysecure.keychain.ui.adapter.KeySelectableAdapter;
import org.sufficientlysecure.keychain.ui.widget.FixedListView; import org.sufficientlysecure.keychain.ui.widget.FixedListView;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround implements LoaderManager.LoaderCallbacks<Cursor> { public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String ARG_DATA_URI = "uri"; private static final String ARG_DATA_URI = "uri";
@@ -143,7 +143,7 @@ public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround i
try { try {
mApiDao.saveAllowedKeyIdsForApp(mDataUri, getSelectedMasterKeyIds()); mApiDao.saveAllowedKeyIdsForApp(mDataUri, getSelectedMasterKeyIds());
} catch (RemoteException | OperationApplicationException e) { } catch (RemoteException | OperationApplicationException e) {
Log.e(Constants.TAG, "Problem saving allowed key ids!", e); Timber.e(e, "Problem saving allowed key ids!");
} }
} }
@@ -30,10 +30,9 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
@@ -100,7 +99,7 @@ public class AppSettingsHeaderFragment extends Fragment {
mPackageCertificate.setText(signature); mPackageCertificate.setText(signature);
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
Log.e(Constants.TAG, "Should not happen!", e); Timber.e(e, "Should not happen!");
} }
} }
@@ -41,11 +41,11 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiApps; import org.sufficientlysecure.keychain.provider.KeychainContract.ApiApps;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class AppsListFragment extends ListFragment implements public class AppsListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener { LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener {
@@ -106,7 +106,7 @@ public class AppsListFragment extends ListFragment implements
i.addCategory(Intent.CATEGORY_LAUNCHER); i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i); startActivity(i);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.e(Constants.TAG, "startApp", e); Timber.e(e, "startApp");
} }
} }
} else { } else {
@@ -326,7 +326,7 @@ public class AppsListFragment extends ListFragment implements
ImageView installIcon = (ImageView) view.findViewById(R.id.api_apps_adapter_install_icon); ImageView installIcon = (ImageView) view.findViewById(R.id.api_apps_adapter_install_icon);
String packageName = cursor.getString(INDEX_PACKAGE_NAME); String packageName = cursor.getString(INDEX_PACKAGE_NAME);
Log.d(Constants.TAG, "packageName: " + packageName); Timber.d("packageName: " + packageName);
int installed = cursor.getInt(INDEX_INSTALLED); int installed = cursor.getInt(INDEX_INSTALLED);
String name = cursor.getString(INDEX_NAME); String name = cursor.getString(INDEX_NAME);
int iconResName = cursor.getInt(INDEX_ICON_RES_ID); int iconResName = cursor.getInt(INDEX_ICON_RES_ID);
@@ -25,11 +25,10 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class RemoteRegisterPresenter { class RemoteRegisterPresenter {
@@ -61,7 +60,7 @@ class RemoteRegisterPresenter {
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
return; return;
} }
@@ -26,7 +26,6 @@ import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.openintents.openpgp.util.OpenPgpUtils.UserId; import org.openintents.openpgp.util.OpenPgpUtils.UserId;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
@@ -37,7 +36,7 @@ import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.remote.ApiPermissionHelper; import org.sufficientlysecure.keychain.remote.ApiPermissionHelper;
import org.sufficientlysecure.keychain.remote.ApiPermissionHelper.WrongPackageCertificateException; import org.sufficientlysecure.keychain.remote.ApiPermissionHelper.WrongPackageCertificateException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class RequestKeyPermissionPresenter { class RequestKeyPermissionPresenter {
@@ -83,7 +82,7 @@ class RequestKeyPermissionPresenter {
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
return; return;
} }
@@ -25,14 +25,12 @@ import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
public class SelectSignKeyIdActivity extends BaseActivity { public class SelectSignKeyIdActivity extends BaseActivity {
@@ -74,10 +72,10 @@ public class SelectSignKeyIdActivity extends BaseActivity {
mPreferredUserId = intent.getStringExtra(EXTRA_USER_ID); mPreferredUserId = intent.getStringExtra(EXTRA_USER_ID);
mData = intent.getParcelableExtra(EXTRA_DATA); mData = intent.getParcelableExtra(EXTRA_DATA);
if (appUri == null) { if (appUri == null) {
Log.e(Constants.TAG, "Intent data missing. Should be Uri of app!"); Timber.e("Intent data missing. Should be Uri of app!");
finish(); finish();
} else { } else {
Log.d(Constants.TAG, "uri: " + appUri); Timber.d("uri: " + appUri);
startListFragments(savedInstanceState, appUri, mData, mPreferredUserId); startListFragments(savedInstanceState, appUri, mData, mPreferredUserId);
} }
} }
@@ -123,7 +121,7 @@ public class SelectSignKeyIdActivity extends BaseActivity {
// EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); // EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT);
// mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId); // mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId);
} else { } else {
Log.e(Constants.TAG, "missing result!"); Timber.e("missing result!");
} }
} }
break; break;
@@ -30,7 +30,6 @@ import android.support.v7.widget.LinearLayoutManager;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
@@ -40,7 +39,8 @@ import org.sufficientlysecure.keychain.remote.ui.adapter.SelectSignKeyAdapter;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity; import org.sufficientlysecure.keychain.ui.CreateKeyActivity;
import org.sufficientlysecure.keychain.ui.util.adapter.CursorAdapter; import org.sufficientlysecure.keychain.ui.util.adapter.CursorAdapter;
import org.sufficientlysecure.keychain.ui.base.RecyclerFragment; import org.sufficientlysecure.keychain.ui.base.RecyclerFragment;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class SelectSignKeyIdListFragment extends RecyclerFragment<SelectSignKeyAdapter> public class SelectSignKeyIdListFragment extends RecyclerFragment<SelectSignKeyAdapter>
implements SelectSignKeyAdapter.SelectSignKeyListener, LoaderManager.LoaderCallbacks<Cursor> { implements SelectSignKeyAdapter.SelectSignKeyListener, LoaderManager.LoaderCallbacks<Cursor> {
@@ -182,8 +182,8 @@ public class SelectSignKeyIdListFragment extends RecyclerFragment<SelectSignKeyA
mApiDao.addAllowedKeyIdForApp(allowedKeysUri, masterKeyId); mApiDao.addAllowedKeyIdForApp(allowedKeysUri, masterKeyId);
mResult.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, masterKeyId); mResult.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, masterKeyId);
Log.d(Constants.TAG, "allowedKeyId: " + masterKeyId); Timber.d("allowedKeyId: " + masterKeyId);
Log.d(Constants.TAG, "allowedKeysUri: " + allowedKeysUri); Timber.d("allowedKeysUri: " + allowedKeysUri);
getActivity().setResult(Activity.RESULT_OK, mResult); getActivity().setResult(Activity.RESULT_OK, mResult);
getActivity().finish(); getActivity().finish();
@@ -30,12 +30,11 @@ import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.provider.AutocryptPeerDataAccessObject; import org.sufficientlysecure.keychain.provider.AutocryptPeerDataAccessObject;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> { class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> {
@@ -68,7 +67,7 @@ class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> {
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
return; return;
} }
@@ -113,11 +112,11 @@ class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> {
void onClickSelect() { void onClickSelect() {
if (keyInfoData == null) { if (keyInfoData == null) {
Log.e(Constants.TAG, "got click on select with no data…?"); Timber.e("got click on select with no data…?");
return; return;
} }
if (selectedItem == null) { if (selectedItem == null) {
Log.e(Constants.TAG, "got click on select with no selection…?"); Timber.e("got click on select with no selection…?");
return; return;
} }
@@ -28,11 +28,10 @@ import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.List; import java.util.List;
@@ -64,7 +63,7 @@ class RemoteSelectAuthenticationKeyPresenter implements LoaderCallbacks<List<Key
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
} }
} }
@@ -103,11 +102,11 @@ class RemoteSelectAuthenticationKeyPresenter implements LoaderCallbacks<List<Key
void onClickSelect() { void onClickSelect() {
if (keyInfoData == null) { if (keyInfoData == null) {
Log.e(Constants.TAG, "got click on select with no data…?"); Timber.e("got click on select with no data…?");
return; return;
} }
if (selectedItem == null) { if (selectedItem == null) {
Log.e(Constants.TAG, "got click on select with no selection…?"); Timber.e("got click on select with no selection…?");
return; return;
} }
@@ -17,10 +17,7 @@
package org.sufficientlysecure.keychain.securitytoken; package org.sufficientlysecure.keychain.securitytoken;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException;
import org.sufficientlysecure.keychain.util.Log;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays; import java.util.Arrays;
@@ -31,6 +31,10 @@ import java.io.IOException;
import nordpol.IsoCard; import nordpol.IsoCard;
import nordpol.android.AndroidCard; import nordpol.android.AndroidCard;
import timber.log.Timber;
import static org.bouncycastle.util.encoders.Hex.toHexString;
public class NfcTransport implements Transport { public class NfcTransport implements Transport {
// timeout is set to 100 seconds to avoid cancellation during calculation // timeout is set to 100 seconds to avoid cancellation during calculation
@@ -60,12 +64,12 @@ public class NfcTransport implements Transport {
public ResponseApdu transceive(final CommandApdu data) throws IOException { public ResponseApdu transceive(final CommandApdu data) throws IOException {
byte[] rawCommand = data.toBytes(); byte[] rawCommand = data.toBytes();
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "nfc out: " + Hex.toHexString(rawCommand)); Timber.d("nfc out: " + toHexString(rawCommand));
} }
byte[] rawResponse = mIsoCard.transceive(rawCommand); byte[] rawResponse = mIsoCard.transceive(rawCommand);
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "nfc in: " + Hex.toHexString(rawResponse)); Timber.d("nfc in: " + toHexString(rawResponse));
} }
return ResponseApdu.fromBytes(rawResponse); return ResponseApdu.fromBytes(rawResponse);
@@ -27,11 +27,10 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
/** /**
@@ -256,7 +255,7 @@ public class SecurityTokenConnection {
secureMessaging = SCP11bSecureMessaging.establish(this, context, commandFactory); secureMessaging = SCP11bSecureMessaging.establish(this, context, commandFactory);
} catch (SecureMessagingException e) { } catch (SecureMessagingException e) {
secureMessaging = null; secureMessaging = null;
Log.e(Constants.TAG, "failed to establish secure messaging", e); Timber.e(e, "failed to establish secure messaging");
} }
} }
@@ -427,7 +426,7 @@ public class SecurityTokenConnection {
// Note: This should not happen, but happens with // Note: This should not happen, but happens with
// https://github.com/FluffyKaon/OpenPGP-Card, thus return an empty string for now! // https://github.com/FluffyKaon/OpenPGP-Card, thus return an empty string for now!
Log.e(Constants.TAG, "Couldn't get holder name, returning empty string!", e); Timber.e(e, "Couldn't get holder name, returning empty string!");
return ""; return "";
} }
} }
@@ -25,10 +25,10 @@ import android.content.IntentFilter;
import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager; import android.hardware.usb.UsbManager;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport;
import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity; import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class UsbConnectionDispatcher { public class UsbConnectionDispatcher {
private Activity mActivity; private Activity mActivity;
@@ -50,7 +50,7 @@ public class UsbConnectionDispatcher {
boolean permission = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, boolean permission = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,
false); false);
if (permission) { if (permission) {
Log.d(Constants.TAG, "Got permission for " + usbDevice.getDeviceName()); Timber.d("Got permission for " + usbDevice.getDeviceName());
sendUsbTransportDiscovered(usbDevice); sendUsbTransportDiscovered(usbDevice);
} }
break; break;
@@ -28,16 +28,14 @@ import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.bcpg.HashAlgorithmTags; import org.bouncycastle.bcpg.HashAlgorithmTags;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.CardException; import org.sufficientlysecure.keychain.securitytoken.CardException;
import org.sufficientlysecure.keychain.securitytoken.CommandApdu; import org.sufficientlysecure.keychain.securitytoken.CommandApdu;
import org.sufficientlysecure.keychain.securitytoken.KeyFormat; import org.sufficientlysecure.keychain.securitytoken.KeyFormat;
import org.sufficientlysecure.keychain.securitytoken.KeyType;
import org.sufficientlysecure.keychain.securitytoken.OpenPgpCapabilities; import org.sufficientlysecure.keychain.securitytoken.OpenPgpCapabilities;
import org.sufficientlysecure.keychain.securitytoken.RSAKeyFormat; import org.sufficientlysecure.keychain.securitytoken.RSAKeyFormat;
import org.sufficientlysecure.keychain.securitytoken.ResponseApdu; import org.sufficientlysecure.keychain.securitytoken.ResponseApdu;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenConnection; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenConnection;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class SecurityTokenPsoSignTokenOp { public class SecurityTokenPsoSignTokenOp {
@@ -54,7 +52,7 @@ public class SecurityTokenPsoSignTokenOp {
private byte[] prepareDsi(byte[] hash, int hashAlgo) throws IOException { private byte[] prepareDsi(byte[] hash, int hashAlgo) throws IOException {
byte[] dsi; byte[] dsi;
Log.i(Constants.TAG, "Hash: " + hashAlgo); Timber.i("Hash: " + hashAlgo);
switch (hashAlgo) { switch (hashAlgo) {
case HashAlgorithmTags.SHA1: case HashAlgorithmTags.SHA1:
if (hash.length != 20) { if (hash.length != 20) {
@@ -27,13 +27,13 @@ import android.os.SystemClock;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread; import android.support.annotation.WorkerThread;
import android.util.Log;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException.UsbCcidErrorException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException.UsbCcidErrorException;
import timber.log.Timber;
import static org.bouncycastle.util.encoders.Hex.toHexString;
public class CcidTransceiver { public class CcidTransceiver {
@@ -87,14 +87,14 @@ public class CcidTransceiver {
CcidDataBlock response = null; CcidDataBlock response = null;
for (CcidDescription.Voltage v : usbCcidDescription.getVoltages()) { for (CcidDescription.Voltage v : usbCcidDescription.getVoltages()) {
Log.v(Constants.TAG, "CCID: attempting to power on with voltage " + v.toString()); Timber.v("CCID: attempting to power on with voltage " + v.toString());
try { try {
response = iccPowerOnVoltage(v.powerOnValue); response = iccPowerOnVoltage(v.powerOnValue);
} catch (UsbCcidErrorException e) { } catch (UsbCcidErrorException e) {
if (e.getErrorResponse().getError() == 7) { // Power select error if (e.getErrorResponse().getError() == 7) { // Power select error
Log.v(Constants.TAG, "CCID: failed to power on with voltage " + v.toString()); Timber.v("CCID: failed to power on with voltage " + v.toString());
iccPowerOff(); iccPowerOff();
Log.v(Constants.TAG, "CCID: powered off"); Timber.v("CCID: powered off");
continue; continue;
} }
@@ -109,8 +109,8 @@ public class CcidTransceiver {
long elapsedTime = SystemClock.elapsedRealtime() - startTime; long elapsedTime = SystemClock.elapsedRealtime() - startTime;
Log.d(Constants.TAG, "Usb transport connected, took " + elapsedTime + "ms, ATR=" + Timber.d("Usb transport connected, took " + elapsedTime + "ms, ATR=" +
Hex.toHexString(response.getData())); toHexString(response.getData()));
return response; return response;
} }
@@ -176,7 +176,7 @@ public class CcidTransceiver {
CcidDataBlock ccidDataBlock = receiveDataBlock(sequenceNumber); CcidDataBlock ccidDataBlock = receiveDataBlock(sequenceNumber);
long elapsedTime = SystemClock.elapsedRealtime() - startTime; long elapsedTime = SystemClock.elapsedRealtime() - startTime;
Log.d(Constants.TAG, "USB XferBlock call took " + elapsedTime + "ms"); Timber.d("USB XferBlock call took " + elapsedTime + "ms");
return ccidDataBlock; return ccidDataBlock;
} }
@@ -187,8 +187,7 @@ public class CcidTransceiver {
ignoredBytes = usbConnection.bulkTransfer( ignoredBytes = usbConnection.bulkTransfer(
usbBulkIn, inputBuffer, inputBuffer.length, DEVICE_SKIP_TIMEOUT_MILLIS); usbBulkIn, inputBuffer, inputBuffer.length, DEVICE_SKIP_TIMEOUT_MILLIS);
if (ignoredBytes > 0) { if (ignoredBytes > 0) {
Log.e(Constants.TAG, Timber.e("Skipped " + ignoredBytes + " bytes: " + toHexString(inputBuffer, 0, ignoredBytes));
"Skipped " + ignoredBytes + " bytes: " + Hex.toHexString(inputBuffer, 0, ignoredBytes));
} }
} while (ignoredBytes > 0); } while (ignoredBytes > 0);
} }
@@ -31,7 +31,6 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Pair; import android.util.Pair;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.CommandApdu; import org.sufficientlysecure.keychain.securitytoken.CommandApdu;
import org.sufficientlysecure.keychain.securitytoken.ResponseApdu; import org.sufficientlysecure.keychain.securitytoken.ResponseApdu;
@@ -39,8 +38,10 @@ import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType;
import org.sufficientlysecure.keychain.securitytoken.Transport; import org.sufficientlysecure.keychain.securitytoken.Transport;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import static org.bouncycastle.util.encoders.Hex.toHexString;
/** /**
@@ -98,7 +99,7 @@ public class UsbTransport implements Transport {
usbConnection = null; usbConnection = null;
} }
Log.d(Constants.TAG, "Usb transport disconnected"); Timber.d("Usb transport disconnected");
} }
/** /**
@@ -158,7 +159,7 @@ public class UsbTransport implements Transport {
} }
CcidDescription ccidDescription = CcidDescription.fromRawDescriptors(usbConnection.getRawDescriptors()); CcidDescription ccidDescription = CcidDescription.fromRawDescriptors(usbConnection.getRawDescriptors());
Log.d(Constants.TAG, "CCID Description: " + ccidDescription); Timber.d("CCID Description: " + ccidDescription);
CcidTransceiver transceiver = new CcidTransceiver(usbConnection, usbBulkIn, usbBulkOut, ccidDescription); CcidTransceiver transceiver = new CcidTransceiver(usbConnection, usbBulkIn, usbBulkOut, ccidDescription);
ccidTransportProtocol = ccidDescription.getSuitableTransportProtocol(); ccidTransportProtocol = ccidDescription.getSuitableTransportProtocol();
@@ -175,12 +176,12 @@ public class UsbTransport implements Transport {
public ResponseApdu transceive(CommandApdu data) throws UsbTransportException { public ResponseApdu transceive(CommandApdu data) throws UsbTransportException {
byte[] rawCommand = data.toBytes(); byte[] rawCommand = data.toBytes();
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "USB >> " + Hex.toHexString(rawCommand)); Timber.d("USB >> " + toHexString(rawCommand));
} }
byte[] rawResponse = ccidTransportProtocol.transceive(rawCommand); byte[] rawResponse = ccidTransportProtocol.transceive(rawCommand);
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "USB << " + Hex.toHexString(rawResponse)); Timber.d("USB << " + toHexString(rawResponse));
} }
return ResponseApdu.fromBytes(rawResponse); return ResponseApdu.fromBytes(rawResponse);
@@ -252,7 +253,7 @@ public class UsbTransport implements Transport {
} }
} }
Log.d(Constants.TAG, "Unknown USB token. Vendor ID: " + usbDevice.getVendorId() + ", Product ID: " + Timber.d("Unknown USB token. Vendor ID: " + usbDevice.getVendorId() + ", Product ID: " +
usbDevice.getProductId()); usbDevice.getProductId());
return null; return null;
} }
@@ -21,12 +21,12 @@ package org.sufficientlysecure.keychain.securitytoken.usb.tpdu;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver; import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver;
import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver.CcidDataBlock; import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver.CcidDataBlock;
import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransportProtocol; import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransportProtocol;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/* T=1 Protocol, see http://www.icedev.se/proxmark3/docs/ISO-7816.pdf, Part 11 */ /* T=1 Protocol, see http://www.icedev.se/proxmark3/docs/ISO-7816.pdf, Part 11 */
public class T1TpduProtocol implements CcidTransportProtocol { public class T1TpduProtocol implements CcidTransportProtocol {
@@ -94,10 +94,10 @@ public class T1TpduProtocol implements CcidTransportProtocol {
sentLength += len; sentLength += len;
if (responseBlock instanceof SBlock) { if (responseBlock instanceof SBlock) {
Log.d(Constants.TAG, "S-Block received " + responseBlock); Timber.d("S-Block received " + responseBlock);
// just ignore // just ignore
} else if (responseBlock instanceof RBlock) { } else if (responseBlock instanceof RBlock) {
Log.d(Constants.TAG, "R-Block received " + responseBlock); Timber.d("R-Block received " + responseBlock);
if (((RBlock) responseBlock).getError() != RBlock.RError.NO_ERROR) { if (((RBlock) responseBlock).getError() != RBlock.RError.NO_ERROR) {
throw new UsbTransportException("R-Block reports error " + ((RBlock) responseBlock).getError()); throw new UsbTransportException("R-Block reports error " + ((RBlock) responseBlock).getError());
} }
@@ -123,7 +123,7 @@ public class T1TpduProtocol implements CcidTransportProtocol {
Block responseBlock = blockFactory.fromBytes(response.getData()); Block responseBlock = blockFactory.fromBytes(response.getData());
if (!(responseBlock instanceof IBlock)) { if (!(responseBlock instanceof IBlock)) {
Log.e(Constants.TAG, "Invalid response block received " + responseBlock); Timber.e("Invalid response block received " + responseBlock);
throw new UsbTransportException("Response: invalid state - invalid block received"); throw new UsbTransportException("Response: invalid state - invalid block received");
} }
@@ -41,7 +41,8 @@ import org.sufficientlysecure.keychain.KeychainApplication;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.SettingsActivity; import org.sufficientlysecure.keychain.ui.SettingsActivity;
import org.sufficientlysecure.keychain.util.ContactHelper; import org.sufficientlysecure.keychain.util.ContactHelper;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class ContactSyncAdapterService extends Service { public class ContactSyncAdapterService extends Service {
@@ -58,7 +59,7 @@ public class ContactSyncAdapterService extends Service {
@Override @Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider,
final SyncResult syncResult) { final SyncResult syncResult) {
Log.d(Constants.TAG, "Performing a contact sync!"); Timber.d("Performing a contact sync!");
new ContactHelper(ContactSyncAdapterService.this).writeKeysToContacts(); new ContactHelper(ContactSyncAdapterService.this).writeKeysToContacts();
@@ -30,9 +30,9 @@ import android.os.IBinder;
import android.os.Message; import android.os.Message;
import android.widget.Toast; import android.widget.Toast;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
* This service actually does nothing, it's sole task is to show a Toast if the use tries to create an account. * This service actually does nothing, it's sole task is to show a Toast if the use tries to create an account.
@@ -75,7 +75,7 @@ public class DummyAccountService extends Service {
@Override @Override
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
Log.d(Constants.TAG, "DummyAccountService.editProperties"); Timber.d("DummyAccountService.editProperties");
return null; return null;
} }
@@ -84,41 +84,41 @@ public class DummyAccountService extends Service {
String[] requiredFeatures, Bundle options) throws NetworkErrorException { String[] requiredFeatures, Bundle options) throws NetworkErrorException {
response.onResult(new Bundle()); response.onResult(new Bundle());
toaster.toast(R.string.account_no_manual_account_creation); toaster.toast(R.string.account_no_manual_account_creation);
Log.d(Constants.TAG, "DummyAccountService.addAccount"); Timber.d("DummyAccountService.addAccount");
return null; return null;
} }
@Override @Override
public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options)
throws NetworkErrorException { throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.confirmCredentials"); Timber.d("DummyAccountService.confirmCredentials");
return null; return null;
} }
@Override @Override
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType,
Bundle options) throws NetworkErrorException { Bundle options) throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.getAuthToken"); Timber.d("DummyAccountService.getAuthToken");
return null; return null;
} }
@Override @Override
public String getAuthTokenLabel(String authTokenType) { public String getAuthTokenLabel(String authTokenType) {
Log.d(Constants.TAG, "DummyAccountService.getAuthTokenLabel"); Timber.d("DummyAccountService.getAuthTokenLabel");
return null; return null;
} }
@Override @Override
public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType,
Bundle options) throws NetworkErrorException { Bundle options) throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.updateCredentials"); Timber.d("DummyAccountService.updateCredentials");
return null; return null;
} }
@Override @Override
public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features)
throws NetworkErrorException { throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.hasFeatures"); Timber.d("DummyAccountService.hasFeatures");
return null; return null;
} }
} }
@@ -29,7 +29,6 @@ import android.os.Messenger;
import android.os.Parcelable; import android.os.Parcelable;
import android.os.RemoteException; import android.os.RemoteException;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.BackupOperation; import org.sufficientlysecure.keychain.operations.BackupOperation;
import org.sufficientlysecure.keychain.operations.BaseOperation; import org.sufficientlysecure.keychain.operations.BaseOperation;
import org.sufficientlysecure.keychain.operations.BenchmarkOperation; import org.sufficientlysecure.keychain.operations.BenchmarkOperation;
@@ -52,7 +51,8 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler.MessageStatus; import org.sufficientlysecure.keychain.service.ServiceProgressHandler.MessageStatus;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
* This Service contains all important long lasting operations for OpenKeychain. It receives Intents with * This Service contains all important long lasting operations for OpenKeychain. It receives Intents with
@@ -172,9 +172,9 @@ public class KeychainService extends Service implements Progressable {
try { try {
mMessenger.get().send(msg); mMessenger.get().send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.w(Constants.TAG, "Exception sending message, Is handler present?", e); Timber.w(e, "Exception sending message, Is handler present?");
} catch (NullPointerException e) { } catch (NullPointerException e) {
Log.w(Constants.TAG, "Messenger is null!", e); Timber.w(e, "Messenger is null!");
} }
} }
@@ -193,7 +193,7 @@ public class KeychainService extends Service implements Progressable {
*/ */
@Override @Override
public void setProgress(String message, int progress, int max) { public void setProgress(String message, int progress, int max) {
Log.d(Constants.TAG, "Send message by setProgress with progress=" + progress + ", max=" Timber.d("Send message by setProgress with progress=" + progress + ", max="
+ max); + max);
Bundle data = new Bundle(); Bundle data = new Bundle();
@@ -66,9 +66,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.OrbotRequiredDialogActivity; import org.sufficientlysecure.keychain.ui.OrbotRequiredDialogActivity;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class KeyserverSyncAdapterService extends Service { public class KeyserverSyncAdapterService extends Service {
@@ -215,7 +216,7 @@ public class KeyserverSyncAdapterService extends Service {
return; return;
} }
} }
Log.d(Constants.TAG, "Performing a keyserver sync!"); Timber.d("Performing a keyserver sync!");
PowerManager pm = (PowerManager) KeyserverSyncAdapterService.this PowerManager pm = (PowerManager) KeyserverSyncAdapterService.this
.getSystemService(Context.POWER_SERVICE); .getSystemService(Context.POWER_SERVICE);
@SuppressWarnings("deprecation") // our min is API 15, deprecated only in 20 @SuppressWarnings("deprecation") // our min is API 15, deprecated only in 20
@@ -249,7 +250,7 @@ public class KeyserverSyncAdapterService extends Service {
*/ */
private void handleUpdateResult(ImportKeyResult result, final int startId) { private void handleUpdateResult(ImportKeyResult result, final int startId) {
if (result.isPending()) { if (result.isPending()) {
Log.d(Constants.TAG, "Orbot required for sync but not running, attempting to start"); Timber.d("Orbot required for sync but not running, attempting to start");
// result is pending due to Orbot not being started // result is pending due to Orbot not being started
// try to start it silently, if disabled show notifications // try to start it silently, if disabled show notifications
new OrbotHelper.SilentStartManager() { new OrbotHelper.SilentStartManager() {
@@ -275,13 +276,13 @@ public class KeyserverSyncAdapterService extends Service {
// if we're killed before we get a response from Orbot, we need the intent to be // if we're killed before we get a response from Orbot, we need the intent to be
// redelivered, so no stopSelf(int) here // redelivered, so no stopSelf(int) here
} else if (isUpdateCancelled()) { } else if (isUpdateCancelled()) {
Log.d(Constants.TAG, "Keyserver sync cancelled, postponing by" + SYNC_POSTPONE_TIME Timber.d("Keyserver sync cancelled, postponing by" + SYNC_POSTPONE_TIME
+ "ms"); + "ms");
postponeSync(); postponeSync();
// postponeSync creates a new intent, so we don't need this to be redelivered // postponeSync creates a new intent, so we don't need this to be redelivered
stopSelf(startId); stopSelf(startId);
} else { } else {
Log.d(Constants.TAG, "Keyserver sync completed: Updated: " + result.mUpdatedKeys Timber.d("Keyserver sync completed: Updated: " + result.mUpdatedKeys
+ " Failed: " + result.mBadKeys); + " Failed: " + result.mBadKeys);
// key sync completed successfully, we can stop // key sync completed successfully, we can stop
stopSelf(startId); stopSelf(startId);
@@ -337,7 +338,7 @@ public class KeyserverSyncAdapterService extends Service {
private ImportKeyResult directUpdate(Context context, ArrayList<ParcelableKeyRing> keyList, private ImportKeyResult directUpdate(Context context, ArrayList<ParcelableKeyRing> keyList,
CryptoInputParcel cryptoInputParcel) { CryptoInputParcel cryptoInputParcel) {
Log.d(Constants.TAG, "Starting normal update"); Timber.d("Starting normal update");
ImportOperation importOp = new ImportOperation(context, ImportOperation importOp = new ImportOperation(context,
KeyWritableRepository.create(context), null); KeyWritableRepository.create(context), null);
return importOp.execute( return importOp.execute(
@@ -356,7 +357,7 @@ public class KeyserverSyncAdapterService extends Service {
*/ */
private ImportKeyResult staggeredUpdate(Context context, ArrayList<ParcelableKeyRing> keyList, private ImportKeyResult staggeredUpdate(Context context, ArrayList<ParcelableKeyRing> keyList,
CryptoInputParcel cryptoInputParcel) { CryptoInputParcel cryptoInputParcel) {
Log.d(Constants.TAG, "Starting staggered update"); Timber.d("Starting staggered update");
// final int WEEK_IN_SECONDS = (int) TimeUnit.DAYS.toSeconds(7); // final int WEEK_IN_SECONDS = (int) TimeUnit.DAYS.toSeconds(7);
// we are limiting our randomness to ORBOT_CIRCUIT_TIMEOUT_SECONDS for now // we are limiting our randomness to ORBOT_CIRCUIT_TIMEOUT_SECONDS for now
final int WEEK_IN_SECONDS = 0; final int WEEK_IN_SECONDS = 0;
@@ -383,11 +384,11 @@ public class KeyserverSyncAdapterService extends Service {
first = false; first = false;
} }
Log.d(Constants.TAG, "Updating key with a wait time of " + waitTime + "s"); Timber.d("Updating key with a wait time of " + waitTime + "s");
try { try {
Thread.sleep(waitTime * 1000); Thread.sleep(waitTime * 1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
Log.e(Constants.TAG, "Exception during sleep between key updates", e); Timber.e(e, "Exception during sleep between key updates");
// skip this one // skip this one
continue; continue;
} }
@@ -445,7 +446,7 @@ public class KeyserverSyncAdapterService extends Service {
ArrayList<Long> ignoreMasterKeyIds = new ArrayList<>(); ArrayList<Long> ignoreMasterKeyIds = new ArrayList<>();
while (updatedKeysCursor != null && updatedKeysCursor.moveToNext()) { while (updatedKeysCursor != null && updatedKeysCursor.moveToNext()) {
long masterKeyId = updatedKeysCursor.getLong(INDEX_UPDATED_KEYS_MASTER_KEY_ID); long masterKeyId = updatedKeysCursor.getLong(INDEX_UPDATED_KEYS_MASTER_KEY_ID);
Log.d(Constants.TAG, "Keyserver sync: Ignoring {" + masterKeyId + "} last updated at {" Timber.d("Keyserver sync: Ignoring {" + masterKeyId + "} last updated at {"
+ updatedKeysCursor.getLong(INDEX_LAST_UPDATED) + "}s"); + updatedKeysCursor.getLong(INDEX_LAST_UPDATED) + "}s");
ignoreMasterKeyIds.add(masterKeyId); ignoreMasterKeyIds.add(masterKeyId);
} }
@@ -477,7 +478,7 @@ public class KeyserverSyncAdapterService extends Service {
if (ignoreMasterKeyIds.contains(keyId)) { if (ignoreMasterKeyIds.contains(keyId)) {
continue; continue;
} }
Log.d(Constants.TAG, "Keyserver sync: Updating {" + keyId + "}"); Timber.d("Keyserver sync: Updating {" + keyId + "}");
byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT); byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT);
String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId); String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId);
// we aren't updating from keybase as of now // we aren't updating from keybase as of now
@@ -42,9 +42,9 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.Date; import java.util.Date;
@@ -122,7 +122,7 @@ public class PassphraseCacheService extends Service {
Passphrase passphrase, Passphrase passphrase,
String primaryUserId, String primaryUserId,
int timeToLiveSeconds) { int timeToLiveSeconds) {
Log.d(Constants.TAG, "PassphraseCacheService.addCachedPassphrase() for " + masterKeyId); Timber.d("PassphraseCacheService.addCachedPassphrase() for " + masterKeyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_ADD); intent.setAction(ACTION_PASSPHRASE_CACHE_ADD);
@@ -137,7 +137,7 @@ public class PassphraseCacheService extends Service {
} }
public static void clearCachedPassphrase(Context context, long masterKeyId, long subKeyId) { public static void clearCachedPassphrase(Context context, long masterKeyId, long subKeyId) {
Log.d(Constants.TAG, "PassphraseCacheService.clearCachedPassphrase() for " + masterKeyId); Timber.d("PassphraseCacheService.clearCachedPassphrase() for " + masterKeyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR); intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR);
@@ -149,7 +149,7 @@ public class PassphraseCacheService extends Service {
} }
public static void clearCachedPassphrases(Context context) { public static void clearCachedPassphrases(Context context) {
Log.d(Constants.TAG, "PassphraseCacheService.clearCachedPassphrase()"); Timber.d("PassphraseCacheService.clearCachedPassphrase()");
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR); intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR);
@@ -164,7 +164,7 @@ public class PassphraseCacheService extends Service {
* @return passphrase or null (if no passphrase is cached for this keyId) * @return passphrase or null (if no passphrase is cached for this keyId)
*/ */
public static Passphrase getCachedPassphrase(Context context, long masterKeyId, long subKeyId) throws KeyNotFoundException { public static Passphrase getCachedPassphrase(Context context, long masterKeyId, long subKeyId) throws KeyNotFoundException {
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphrase() for masterKeyId " Timber.d("PassphraseCacheService.getCachedPassphrase() for masterKeyId "
+ masterKeyId + ", subKeyId " + subKeyId); + masterKeyId + ", subKeyId " + subKeyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
@@ -216,7 +216,7 @@ public class PassphraseCacheService extends Service {
case MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND: case MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND:
throw new KeyNotFoundException(); throw new KeyNotFoundException();
default: default:
Log.e(Constants.TAG, "timeout case!"); Timber.e("timeout case!");
throw new KeyNotFoundException("should not happen!"); throw new KeyNotFoundException("should not happen!");
} }
} }
@@ -232,7 +232,7 @@ public class PassphraseCacheService extends Service {
// passphrase for symmetric encryption? // passphrase for symmetric encryption?
if (masterKeyId == Constants.key.symmetric) { if (masterKeyId == Constants.key.symmetric) {
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for symmetric encryption"); Timber.d("PassphraseCacheService.getCachedPassphraseImpl() for symmetric encryption");
CachedPassphrase cachedPassphrase = mPassphraseCache.get(Constants.key.symmetric); CachedPassphrase cachedPassphrase = mPassphraseCache.get(Constants.key.symmetric);
if (cachedPassphrase == null) { if (cachedPassphrase == null) {
return null; return null;
@@ -241,7 +241,7 @@ public class PassphraseCacheService extends Service {
} }
// try to get master key id which is used as an identifier for cached passphrases // try to get master key id which is used as an identifier for cached passphrases
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for masterKeyId " Timber.d("PassphraseCacheService.getCachedPassphraseImpl() for masterKeyId "
+ masterKeyId + ", subKeyId " + subKeyId); + masterKeyId + ", subKeyId " + subKeyId);
// get the type of key (from the database) // get the type of key (from the database)
@@ -263,13 +263,13 @@ public class PassphraseCacheService extends Service {
// If we cache strictly by subkey, exit early // If we cache strictly by subkey, exit early
if (Preferences.getPreferences(mContext).getPassphraseCacheSubs()) { if (Preferences.getPreferences(mContext).getPassphraseCacheSubs()) {
Log.d(Constants.TAG, "PassphraseCacheService: specific subkey passphrase not (yet) cached, returning null"); Timber.d("PassphraseCacheService: specific subkey passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either // not really an error, just means the passphrase is not cached but not empty either
return null; return null;
} }
if (subKeyId == masterKeyId) { if (subKeyId == masterKeyId) {
Log.d(Constants.TAG, "PassphraseCacheService: masterkey passphrase not (yet) cached, returning null"); Timber.d("PassphraseCacheService: masterkey passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either // not really an error, just means the passphrase is not cached but not empty either
return null; return null;
} }
@@ -277,7 +277,7 @@ public class PassphraseCacheService extends Service {
cachedPassphrase = mPassphraseCache.get(masterKeyId); cachedPassphrase = mPassphraseCache.get(masterKeyId);
// If we cache strictly by subkey, exit early // If we cache strictly by subkey, exit early
if (cachedPassphrase == null) { if (cachedPassphrase == null) {
Log.d(Constants.TAG, "PassphraseCacheService: keyring passphrase not (yet) cached, returning null"); Timber.d("PassphraseCacheService: keyring passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either // not really an error, just means the passphrase is not cached but not empty either
return null; return null;
} }
@@ -299,7 +299,7 @@ public class PassphraseCacheService extends Service {
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); String action = intent.getAction();
Log.d(Constants.TAG, "PassphraseCacheService: Received broadcast..."); Timber.d("PassphraseCacheService: Received broadcast...");
if (action.equals(BROADCAST_ACTION_PASSPHRASE_CACHE_SERVICE)) { if (action.equals(BROADCAST_ACTION_PASSPHRASE_CACHE_SERVICE)) {
long keyId = intent.getLongExtra(EXTRA_KEY_ID, -1); long keyId = intent.getLongExtra(EXTRA_KEY_ID, -1);
@@ -335,7 +335,7 @@ public class PassphraseCacheService extends Service {
*/ */
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(Constants.TAG, "PassphraseCacheService.onStartCommand()"); Timber.d("PassphraseCacheService.onStartCommand()");
if (intent == null || intent.getAction() == null) { if (intent == null || intent.getAction() == null) {
updateService(); updateService();
@@ -352,10 +352,10 @@ public class PassphraseCacheService extends Service {
Passphrase passphrase = intent.getParcelableExtra(EXTRA_PASSPHRASE); Passphrase passphrase = intent.getParcelableExtra(EXTRA_PASSPHRASE);
String primaryUserID = intent.getStringExtra(EXTRA_USER_ID); String primaryUserID = intent.getStringExtra(EXTRA_USER_ID);
Log.d(Constants.TAG, Timber.d(
"PassphraseCacheService: Received ACTION_PASSPHRASE_CACHE_ADD intent in onStartCommand() with masterkeyId: " "PassphraseCacheService: Received ACTION_PASSPHRASE_CACHE_ADD intent in onStartCommand() with masterkeyId: "
+ masterKeyId + ", subKeyId: " + subKeyId + ", ttl: " + timeoutTtl + ", usrId: " + primaryUserID + masterKeyId + ", subKeyId: " + subKeyId + ", ttl: " + timeoutTtl + ", usrId: " +
); primaryUserID);
// if we don't cache by specific subkey id, or the requested subkey is the master key, // if we don't cache by specific subkey id, or the requested subkey is the master key,
// just add master key id to the cache, otherwise, add this specific subkey to the cache // just add master key id to the cache, otherwise, add this specific subkey to the cache
@@ -389,7 +389,7 @@ public class PassphraseCacheService extends Service {
try { try {
// If only one of these is symmetric, error out! // If only one of these is symmetric, error out!
if (masterKeyId == Constants.key.symmetric ^ subKeyId == Constants.key.symmetric) { if (masterKeyId == Constants.key.symmetric ^ subKeyId == Constants.key.symmetric) {
Log.e(Constants.TAG, "PassphraseCacheService: Bad request, missing masterKeyId or subKeyId!"); Timber.e("PassphraseCacheService: Bad request, missing masterKeyId or subKeyId!");
msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND; msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND;
} else { } else {
Passphrase passphrase = getCachedPassphraseImpl(masterKeyId, subKeyId); Passphrase passphrase = getCachedPassphraseImpl(masterKeyId, subKeyId);
@@ -399,14 +399,14 @@ public class PassphraseCacheService extends Service {
msg.setData(bundle); msg.setData(bundle);
} }
} catch (KeyRepository.NotFoundException e) { } catch (KeyRepository.NotFoundException e) {
Log.e(Constants.TAG, "PassphraseCacheService: Passphrase for unknown key was requested!"); Timber.e("PassphraseCacheService: Passphrase for unknown key was requested!");
msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND; msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND;
} }
try { try {
messenger.send(msg); messenger.send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "PassphraseCacheService: Sending message failed", e); Timber.e(e, "PassphraseCacheService: Sending message failed");
} }
break; break;
} }
@@ -440,7 +440,7 @@ public class PassphraseCacheService extends Service {
break; break;
} }
default: { default: {
Log.e(Constants.TAG, "PassphraseCacheService: Intent or Intent Action not supported!"); Timber.e("PassphraseCacheService: Intent or Intent Action not supported!");
break; break;
} }
} }
@@ -463,7 +463,7 @@ public class PassphraseCacheService extends Service {
mPassphraseCache.remove(keyId); mPassphraseCache.remove(keyId);
} }
Log.d(Constants.TAG, "PassphraseCacheService Timeout of keyId " + keyId + ", removed from memory!"); Timber.d("PassphraseCacheService Timeout of keyId " + keyId + ", removed from memory!");
updateService(); updateService();
} }
@@ -481,7 +481,7 @@ public class PassphraseCacheService extends Service {
i += 1; i += 1;
} }
Log.d(Constants.TAG, "PassphraseCacheService Removing all cached-until-lock passphrases from memory!"); Timber.d("PassphraseCacheService Removing all cached-until-lock passphrases from memory!");
updateService(); updateService();
} }
@@ -491,7 +491,7 @@ public class PassphraseCacheService extends Service {
startForeground(Constants.Notification.PASSPHRASE_CACHE, getNotification()); startForeground(Constants.Notification.PASSPHRASE_CACHE, getNotification());
} else { } else {
// stop whole service if no cached passphrases remaining // stop whole service if no cached passphrases remaining
Log.d(Constants.TAG, "PassphraseCacheService: No passphrases remaining in memory, stopping service!"); Timber.d("PassphraseCacheService: No passphrases remaining in memory, stopping service!");
stopForeground(true); stopForeground(true);
stopSelf(); stopSelf();
} }
@@ -544,7 +544,7 @@ public class PassphraseCacheService extends Service {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
mContext = this; mContext = this;
Log.d(Constants.TAG, "PassphraseCacheService, onCreate()"); Timber.d("PassphraseCacheService, onCreate()");
registerReceiver(); registerReceiver();
} }
@@ -552,7 +552,7 @@ public class PassphraseCacheService extends Service {
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
Log.d(Constants.TAG, "PassphraseCacheService, onDestroy()"); Timber.d("PassphraseCacheService, onDestroy()");
unregisterReceiver(mIntentReceiver); unregisterReceiver(mIntentReceiver);
} }
@@ -25,11 +25,11 @@ import android.os.Message;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class ServiceProgressHandler extends Handler { public class ServiceProgressHandler extends Handler {
@@ -144,7 +144,7 @@ public class ServiceProgressHandler extends Handler {
break; break;
default: default:
Log.e(Constants.TAG, "unknown handler message!"); Timber.e("unknown handler message!");
break; break;
} }
} }
@@ -33,11 +33,14 @@ import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
import java.util.Collection; import java.util.Collection;
import static java.lang.String.format;
/** /**
* This class supports a single, low-level, authentication operation. * This class supports a single, low-level, authentication operation.
* <p/> * <p/>
@@ -83,7 +86,7 @@ public class AuthenticationOperation extends BaseOperation<AuthenticationParcel>
log.add(LogType.MSG_AUTH, indent); log.add(LogType.MSG_AUTH, indent);
indent += 1; indent += 1;
Log.d(TAG, data.toString()); Timber.d(data.toString());
long opTime; long opTime;
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
@@ -231,7 +234,7 @@ public class AuthenticationOperation extends BaseOperation<AuthenticationParcel>
} }
opTime = System.currentTimeMillis() - startTime; opTime = System.currentTimeMillis() - startTime;
Log.d(TAG, "Authentication operation duration : " + String.format("%.2f", opTime / 1000.0) + "s"); Timber.d("Authentication operation duration : " + format("%.2f", opTime / 1000.0) + "s");
log.add(LogType.MSG_AUTH_OK, indent); log.add(LogType.MSG_AUTH_OK, indent);
AuthenticationResult result = new AuthenticationResult(AuthenticationResult.RESULT_OK, log); AuthenticationResult result = new AuthenticationResult(AuthenticationResult.RESULT_OK, log);
@@ -21,10 +21,10 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class CertifyFingerprintActivity extends BaseActivity { public class CertifyFingerprintActivity extends BaseActivity {
@@ -36,7 +36,7 @@ public class CertifyFingerprintActivity extends BaseActivity {
mDataUri = getIntent().getData(); mDataUri = getIntent().getData();
if (mDataUri == null) { if (mDataUri == null) {
Log.e(Constants.TAG, "Data missing. Should be uri of key!"); Timber.e("Data missing. Should be uri of key!");
finish(); finish();
return; return;
} }
@@ -48,7 +48,7 @@ public class CertifyFingerprintActivity extends BaseActivity {
} }
}); });
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString()); Timber.i("mDataUri: " + mDataUri.toString());
startFragment(savedInstanceState, mDataUri); startFragment(savedInstanceState, mDataUri);
} }
@@ -18,11 +18,8 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import java.io.IOException;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Typeface;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
@@ -33,14 +30,13 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.ui.base.LoaderFragment; import org.sufficientlysecure.keychain.ui.base.LoaderFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class CertifyFingerprintFragment extends LoaderFragment implements public class CertifyFingerprintFragment extends LoaderFragment implements
@@ -106,7 +102,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
if (dataUri == null) { if (dataUri == null) {
Log.e(Constants.TAG, "Data missing. Should be Uri of key!"); Timber.e("Data missing. Should be Uri of key!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -117,7 +113,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
private void loadData(Uri dataUri) { private void loadData(Uri dataUri) {
mDataUri = dataUri; mDataUri = dataUri;
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString()); Timber.i("mDataUri: " + mDataUri.toString());
// Prepare the loaders. Either re-connect with an existing ones, // Prepare the loaders. Either re-connect with an existing ones,
// or start new ones. // or start new ones.
@@ -187,7 +183,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
.getCachedPublicKeyRing(dataUri) .getCachedPublicKeyRing(dataUri)
.extractOrGetMasterKeyId(); .extractOrGetMasterKeyId();
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "key not found!", e); Timber.e(e, "key not found!");
} }
Intent certifyIntent = new Intent(getActivity(), CertifyKeyActivity.class); Intent certifyIntent = new Intent(getActivity(), CertifyKeyActivity.class);
certifyIntent.putExtras(getActivity().getIntent()); certifyIntent.putExtras(getActivity().getIntent());
@@ -46,8 +46,9 @@ import org.sufficientlysecure.keychain.ui.base.CachingCryptoOperationFragment;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils; import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner; import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class CertifyKeyFragment public class CertifyKeyFragment
extends CachingCryptoOperationFragment<CertifyActionsParcel, CertifyResult> { extends CachingCryptoOperationFragment<CertifyActionsParcel, CertifyResult> {
@@ -75,7 +76,7 @@ public class CertifyKeyFragment
mCertifyKeySpinner.setPreSelectedKeyId(certifyKeyId); mCertifyKeySpinner.setPreSelectedKeyId(certifyKeyId);
} }
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "certify certify check failed", e); Timber.e(e, "certify certify check failed");
} }
} }
} }
@@ -52,10 +52,10 @@ import org.sufficientlysecure.keychain.service.UploadKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
@@ -435,7 +435,7 @@ public class CreateKeyFinalFragment extends Fragment {
try { try {
builder = SaveKeyringParcel.buildChangeKeyringParcel(key.getMasterKeyId(), key.getFingerprint()); builder = SaveKeyringParcel.buildChangeKeyringParcel(key.getMasterKeyId(), key.getFingerprint());
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "Key that should be moved to Security Token not found in database!"); Timber.e("Key that should be moved to Security Token not found in database!");
return; return;
} }
@@ -32,12 +32,12 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment; import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class CreateKeyStartFragment extends Fragment { public class CreateKeyStartFragment extends Fragment {
public static final int REQUEST_CODE_IMPORT_KEY = 0x00007012; public static final int REQUEST_CODE_IMPORT_KEY = 0x00007012;
@@ -149,7 +149,7 @@ public class CreateKeyStartFragment extends Fragment {
} }
} }
} else { } else {
Log.e(Constants.TAG, "No valid request code!"); Timber.e("No valid request code!");
} }
} }
@@ -60,6 +60,8 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public abstract class DecryptFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { public abstract class DecryptFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -424,7 +426,7 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager.
int result = mSignatureResult.getResult(); int result = mSignatureResult.getResult();
if (result != OpenPgpSignatureResult.RESULT_KEY_MISSING if (result != OpenPgpSignatureResult.RESULT_KEY_MISSING
&& result != OpenPgpSignatureResult.RESULT_INVALID_SIGNATURE) { && result != OpenPgpSignatureResult.RESULT_INVALID_SIGNATURE) {
Log.e(Constants.TAG, "got missing status for non-missing key, shouldn't happen!"); Timber.e("got missing status for non-missing key, shouldn't happen!");
} }
String userId = mSignatureResult.getPrimaryUserId(); String userId = mSignatureResult.getPrimaryUserId();
@@ -95,9 +95,9 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableHashMap; import org.sufficientlysecure.keychain.util.ParcelableHashMap;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
/** /**
@@ -321,7 +321,7 @@ public class DecryptListFragment
FileHelper.copyUriData(activity, decryptedFileUri, saveUri); FileHelper.copyUriData(activity, decryptedFileUri, saveUri);
Notify.create(activity, R.string.file_saved, Style.OK).show(); Notify.create(activity, R.string.file_saved, Style.OK).show();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "error saving file", e); Timber.e(e, "error saving file");
Notify.create(activity, R.string.error_saving_file, Style.ERROR).show(); Notify.create(activity, R.string.error_saving_file, Style.ERROR).show();
} }
} }
@@ -631,7 +631,7 @@ public class DecryptListFragment
mCurrentInputUri = mPendingInputUris.remove(0); mCurrentInputUri = mPendingInputUris.remove(0);
} }
Log.d(Constants.TAG, "mCurrentInputUri=" + mCurrentInputUri); Timber.d("mCurrentInputUri=" + mCurrentInputUri);
if (!checkAndRequestReadPermission(activity, mCurrentInputUri)) { if (!checkAndRequestReadPermission(activity, mCurrentInputUri)) {
return null; return null;
@@ -825,7 +825,7 @@ public class DecryptListFragment
Notify.create(activity, R.string.file_delete_none, Style.WARN).show(); Notify.create(activity, R.string.file_delete_none, Style.WARN).show();
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "exception deleting file", e); Timber.e(e, "exception deleting file");
Notify.create(activity, R.string.file_delete_exception, Style.ERROR).show(); Notify.create(activity, R.string.file_delete_exception, Style.ERROR).show();
} }
@@ -33,7 +33,6 @@ import android.widget.AdapterView;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.operations.results.DeleteResult;
@@ -47,7 +46,7 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@@ -111,9 +110,8 @@ public class DeleteKeyDialogActivity extends FragmentActivity {
showRevokeDeleteDialog(name); showRevokeDeleteDialog(name);
} }
} catch (KeyRepository.NotFoundException e) { } catch (KeyRepository.NotFoundException e) {
Log.e(Constants.TAG, Timber.e(e, "Secret key to delete not found at DeleteKeyDialogActivity for "
"Secret key to delete not found at DeleteKeyDialogActivity for " + mMasterKeyIds[0]);
+ mMasterKeyIds[0], e);
finish(); finish();
} }
} else { } else {
@@ -20,10 +20,10 @@ package org.sufficientlysecure.keychain.ui;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class EditIdentitiesActivity extends BaseActivity { public class EditIdentitiesActivity extends BaseActivity {
@@ -33,7 +33,7 @@ public class EditIdentitiesActivity extends BaseActivity {
Uri dataUri = getIntent().getData(); Uri dataUri = getIntent().getData();
if (dataUri == null) { if (dataUri == null) {
Log.e(Constants.TAG, "Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!"); Timber.e("Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!");
finish(); finish();
return; return;
} }
@@ -62,8 +62,9 @@ import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class EditIdentitiesFragment extends Fragment public class EditIdentitiesFragment extends Fragment
implements LoaderManager.LoaderCallbacks<Cursor> { implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -140,7 +141,7 @@ public class EditIdentitiesFragment extends Fragment
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
if (dataUri == null) { if (dataUri == null) {
Log.e(Constants.TAG, "Either a key Uri is required!"); Timber.e("Either a key Uri is required!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -164,7 +165,7 @@ public class EditIdentitiesFragment extends Fragment
private void loadData(Uri dataUri) { private void loadData(Uri dataUri) {
mDataUri = dataUri; mDataUri = dataUri;
Log.i(Constants.TAG, "mDataUri: " + mDataUri); Timber.i("mDataUri: " + mDataUri);
// load the secret key ring. we do verify here that the passphrase is correct, so cached won't do // load the secret key ring. we do verify here that the passphrase is correct, so cached won't do
try { try {
@@ -20,11 +20,11 @@ package org.sufficientlysecure.keychain.ui;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class EditKeyActivity extends BaseActivity { public class EditKeyActivity extends BaseActivity {
@@ -39,7 +39,7 @@ public class EditKeyActivity extends BaseActivity {
Uri dataUri = getIntent().getData(); Uri dataUri = getIntent().getData();
SaveKeyringParcel saveKeyringParcel = getIntent().getParcelableExtra(EXTRA_SAVE_KEYRING_PARCEL); SaveKeyringParcel saveKeyringParcel = getIntent().getParcelableExtra(EXTRA_SAVE_KEYRING_PARCEL);
if (dataUri == null && saveKeyringParcel == null) { if (dataUri == null && saveKeyringParcel == null) {
Log.e(Constants.TAG, "Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!"); Timber.e("Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!");
finish(); finish();
return; return;
} }
@@ -38,7 +38,6 @@ import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
@@ -68,8 +67,9 @@ import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyExpiryDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyringParcel, OperationResult> public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyringParcel, OperationResult>
implements LoaderManager.LoaderCallbacks<Cursor> { implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -168,7 +168,7 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
SaveKeyringParcel saveKeyringParcel = getArguments().getParcelable(ARG_SAVE_KEYRING_PARCEL); SaveKeyringParcel saveKeyringParcel = getArguments().getParcelable(ARG_SAVE_KEYRING_PARCEL);
if (dataUri == null && saveKeyringParcel == null) { if (dataUri == null && saveKeyringParcel == null) {
Log.e(Constants.TAG, "Either a key Uri or ARG_SAVE_KEYRING_PARCEL is required!"); Timber.e("Either a key Uri or ARG_SAVE_KEYRING_PARCEL is required!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -195,7 +195,7 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring
private void loadData(Uri dataUri) { private void loadData(Uri dataUri) {
mDataUri = dataUri; mDataUri = dataUri;
Log.i(Constants.TAG, "mDataUri: " + mDataUri); Timber.i("mDataUri: " + mDataUri);
// load the secret key ring. we do verify here that the passphrase is correct, so cached won't do // load the secret key ring. we do verify here that the passphrase is correct, so cached won't do
try { try {
@@ -76,9 +76,10 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener; import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class EncryptFilesFragment public class EncryptFilesFragment
extends CachingCryptoOperationFragment<SignEncryptParcel, SignEncryptResult> { extends CachingCryptoOperationFragment<SignEncryptParcel, SignEncryptResult> {
@@ -901,7 +902,7 @@ public class EncryptFilesFragment
for (Uri inputUri : inputUris) { for (Uri inputUri : inputUris) {
ViewModel newModel = new ViewModel(mActivity, inputUri); ViewModel newModel = new ViewModel(mActivity, inputUri);
if (mDataset.contains(newModel)) { if (mDataset.contains(newModel)) {
Log.e(Constants.TAG, "Skipped duplicate " + inputUri); Timber.e("Skipped duplicate " + inputUri);
} else { } else {
mDataset.add(newModel); mDataset.add(newModel);
} }
@@ -44,8 +44,9 @@ import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.ui.widget.EncryptKeyCompletionView; import org.sufficientlysecure.keychain.ui.widget.EncryptKeyCompletionView;
import org.sufficientlysecure.keychain.ui.widget.KeySpinner; import org.sufficientlysecure.keychain.ui.widget.KeySpinner;
import org.sufficientlysecure.keychain.ui.widget.KeySpinner.OnKeyChangedListener; import org.sufficientlysecure.keychain.ui.widget.KeySpinner.OnKeyChangedListener;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
public class EncryptModeAsymmetricFragment extends EncryptModeFragment { public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
@@ -144,7 +145,7 @@ public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
mSignKeySpinner.setPreSelectedKeyId(signatureKeyId); mSignKeySpinner.setPreSelectedKeyId(signatureKeyId);
} }
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "key not found for signing!", e); Timber.e(e, "key not found for signing!");
Notify.create(getActivity(), getString(R.string.error_preselect_sign_key, Notify.create(getActivity(), getString(R.string.error_preselect_sign_key,
KeyFormattingUtils.beautifyKeyId(signatureKeyId)), KeyFormattingUtils.beautifyKeyId(signatureKeyId)),
Style.ERROR).show(); Style.ERROR).show();
@@ -158,7 +159,7 @@ public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
mKeyRepository.getCanonicalizedPublicKeyRing(preselectedId); mKeyRepository.getCanonicalizedPublicKeyRing(preselectedId);
mEncryptKeyView.addObject(new KeyItem(ring)); mEncryptKeyView.addObject(new KeyItem(ring));
} catch (NotFoundException e) { } catch (NotFoundException e) {
Log.e(Constants.TAG, "key not found for encryption!", e); Timber.e(e, "key not found for encryption!");
Notify.create(getActivity(), getString(R.string.error_preselect_encrypt_key, Notify.create(getActivity(), getString(R.string.error_preselect_encrypt_key,
KeyFormattingUtils.beautifyKeyId(preselectedId)), KeyFormattingUtils.beautifyKeyId(preselectedId)),
Style.ERROR).show(); Style.ERROR).show();
@@ -25,6 +25,7 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import org.apache.james.mime4j.util.MimeUtil; import org.apache.james.mime4j.util.MimeUtil;
@@ -33,7 +34,8 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class EncryptTextActivity extends EncryptActivity { public class EncryptTextActivity extends EncryptActivity {
@@ -63,8 +65,6 @@ public class EncryptTextActivity extends EncryptActivity {
// When sending to OpenKeychain Encrypt via share menu // When sending to OpenKeychain Encrypt via share menu
if (Intent.ACTION_SEND.equals(action) && type != null) { if (Intent.ACTION_SEND.equals(action) && type != null) {
Log.logDebugBundle(extras, "extras");
// When sending to OpenKeychain Encrypt via share menu // When sending to OpenKeychain Encrypt via share menu
if ( ! MimeUtil.isSameMimeType("text/plain", type)) { if ( ! MimeUtil.isSameMimeType("text/plain", type)) {
Toast.makeText(this, R.string.toast_wrong_mimetype, Toast.LENGTH_LONG).show(); Toast.makeText(this, R.string.toast_wrong_mimetype, Toast.LENGTH_LONG).show();
@@ -30,9 +30,8 @@ import android.widget.TextView;
import org.markdown4j.Markdown4jProcessor; import org.markdown4j.Markdown4jProcessor;
import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlResImageGetter;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
@@ -54,7 +53,7 @@ public class HelpAboutFragment extends Fragment {
getActivity().getResources().openRawResource(R.raw.help_about)); getActivity().getResources().openRawResource(R.raw.help_about));
aboutTextView.setHtml(html, new HtmlResImageGetter(aboutTextView)); aboutTextView.setHtml(html, new HtmlResImageGetter(aboutTextView));
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
} }
return view; return view;
@@ -73,7 +72,7 @@ public class HelpAboutFragment extends Fragment {
result = String.format("%s (%s)", info.versionName, info.versionCode); result = String.format("%s (%s)", info.versionName, info.versionCode);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.w(Constants.TAG, "Unable to get application version: " + e.getMessage()); Timber.w("Unable to get application version: " + e.getMessage());
result = "Unable to get application version."; result = "Unable to get application version.";
} }
@@ -28,8 +28,7 @@ import android.widget.ScrollView;
import org.markdown4j.Markdown4jProcessor; import org.markdown4j.Markdown4jProcessor;
import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlResImageGetter;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException; import java.io.IOException;
@@ -71,7 +70,7 @@ public class HelpMarkdownFragment extends Fragment {
getActivity().getResources().openRawResource(mHtmlFile)); getActivity().getResources().openRawResource(mHtmlFile));
text.setHtml(html, new HtmlResImageGetter(text)); text.setHtml(html, new HtmlResImageGetter(text));
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
} }
return scroller; return scroller;
@@ -42,9 +42,9 @@ import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache; import org.sufficientlysecure.keychain.util.ParcelableFileCache;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -176,7 +176,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
// action: search immediately // action: search immediately
startListFragment(null, null, query, null); startListFragment(null, null, query, null);
} else { } else {
Log.e(Constants.TAG, "Query is empty!"); Timber.e("Query is empty!");
return; return;
} }
} else if (extras.containsKey(EXTRA_FINGERPRINT)) { } else if (extras.containsKey(EXTRA_FINGERPRINT)) {
@@ -193,10 +193,8 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
startListFragment(null, null, query, null); startListFragment(null, null, query, null);
} }
} else { } else {
Log.e(Constants.TAG, Timber.e("IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query', 'key_id', or " +
"IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query', 'key_id', or " + "'fingerprint' extra!");
"'fingerprint' extra!"
);
return; return;
} }
break; break;
@@ -216,7 +214,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
dataUri.getScheme() + "://" + dataUri.getAuthority()); dataUri.getScheme() + "://" + dataUri.getAuthority());
Preferences.CloudSearchPrefs cloudSearchPrefs = new Preferences.CloudSearchPrefs( Preferences.CloudSearchPrefs cloudSearchPrefs = new Preferences.CloudSearchPrefs(
true, false, false, keyserver); true, false, false, keyserver);
Log.d(Constants.TAG, "Using keyserver: " + keyserver); Timber.d("Using keyserver: " + keyserver);
// process URL to get operation and query // process URL to get operation and query
String operation = dataUri.getQueryParameter("op"); String operation = dataUri.getQueryParameter("op");
@@ -352,7 +350,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME); new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME);
cache.writeCache(entries.size(), keyRings.iterator()); cache.writeCache(entries.size(), keyRings.iterator());
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Problem writing cache file", e); Timber.e(e, "Problem writing cache file");
Notify.create(this, "Problem writing cache file!", Notify.Style.ERROR).show(); Notify.create(this, "Problem writing cache file!", Notify.Style.ERROR).show();
return; return;
} }
@@ -32,7 +32,6 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection; import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
import org.sufficientlysecure.keychain.keyimport.processing.BytesLoaderState; import org.sufficientlysecure.keychain.keyimport.processing.BytesLoaderState;
@@ -42,7 +41,7 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.ui.util.PermissionsUtil; import org.sufficientlysecure.keychain.ui.util.PermissionsUtil;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
@@ -151,7 +150,7 @@ public class ImportKeysFileFragment extends Fragment {
try { try {
isEncrypted = FileHelper.isEncryptedFile(mActivity, mCurrentUri); isEncrypted = FileHelper.isEncryptedFile(mActivity, mCurrentUri);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error opening file", e); Timber.e(e, "Error opening file");
Notify.create(mActivity, R.string.error_bad_data, Style.ERROR).show(); Notify.create(mActivity, R.string.error_bad_data, Style.ERROR).show();
return; return;
@@ -43,9 +43,9 @@ import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment; import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4; import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
@@ -94,11 +94,11 @@ public class ImportKeysProxyActivity extends FragmentActivity
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
handleActionNdefDiscovered(getIntent()); handleActionNdefDiscovered(getIntent());
} else { } else {
Log.e(Constants.TAG, "Android Beam not supported by Android < 4.1"); Timber.e("Android Beam not supported by Android < 4.1");
finish(); finish();
} }
} else { } else {
Log.e(Constants.TAG, "No valid scheme or action given!"); Timber.e("No valid scheme or action given!");
finish(); finish();
} }
} }
@@ -123,7 +123,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
resultCode, data); resultCode, data);
if (scanResult == null || scanResult.getFormatName() == null) { if (scanResult == null || scanResult.getFormatName() == null) {
Log.e(Constants.TAG, "scanResult or formatName null! Should not happen!"); Timber.e("scanResult or formatName null! Should not happen!");
finish(); finish();
return; return;
} }
@@ -142,7 +142,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
private void processScannedContent(Uri uri) { private void processScannedContent(Uri uri) {
String action = getIntent().getAction(); String action = getIntent().getAction();
Log.d(Constants.TAG, "scanned: " + uri); Timber.d("scanned: " + uri);
// example: pgp+transfer: // example: pgp+transfer:
if (uri != null && uri.getScheme() != null && uri.getScheme().equalsIgnoreCase(Constants.SKT_SCHEME)) { if (uri != null && uri.getScheme() != null && uri.getScheme().equalsIgnoreCase(Constants.SKT_SCHEME)) {
@@ -68,8 +68,9 @@ import org.sufficientlysecure.keychain.ui.base.RecyclerFragment;
import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity; import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.FabContainer; import org.sufficientlysecure.keychain.util.FabContainer;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter> public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
implements SearchView.OnQueryTextListener, implements SearchView.OnQueryTextListener,
@@ -381,7 +382,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
Notify.create(getActivity(), "Restored debug_backup.db", Notify.Style.OK).show(); Notify.create(getActivity(), "Restored debug_backup.db", Notify.Style.OK).show();
getActivity().getContentResolver().notifyChange(KeychainContract.KeyRings.CONTENT_URI, null); getActivity().getContentResolver().notifyChange(KeychainContract.KeyRings.CONTENT_URI, null);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IO Error", e); Timber.e(e, "IO Error");
Notify.create(getActivity(), "IO Error " + e.getMessage(), Notify.Style.ERROR).show(); Notify.create(getActivity(), "IO Error " + e.getMessage(), Notify.Style.ERROR).show();
} }
return true; return true;
@@ -391,7 +392,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
KeychainDatabase.debugBackup(getActivity(), false); KeychainDatabase.debugBackup(getActivity(), false);
Notify.create(getActivity(), "Backup to debug_backup.db completed", Notify.Style.OK).show(); Notify.create(getActivity(), "Backup to debug_backup.db completed", Notify.Style.OK).show();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IO Error", e); Timber.e(e, "IO Error");
Notify.create(getActivity(), "IO Error: " + e.getMessage(), Notify.Style.ERROR).show(); Notify.create(getActivity(), "IO Error: " + e.getMessage(), Notify.Style.ERROR).show();
} }
return true; return true;
@@ -422,7 +423,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
@Override @Override
public boolean onQueryTextChange(String s) { public boolean onQueryTextChange(String s) {
Log.d(Constants.TAG, "onQueryTextChange s:" + s); Timber.d("onQueryTextChange s: %s", s);
// Called when the action bar search text has changed. Update the // Called when the action bar search text has changed. Update the
// search filter, and restart the loader to do a new query with this // search filter, and restart the loader to do a new query with this
// filter. // filter.
@@ -32,15 +32,12 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainDatabase; import org.sufficientlysecure.keychain.provider.KeychainDatabase;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel; import org.sufficientlysecure.keychain.service.CertifyActionsParcel;
import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
@@ -90,7 +87,7 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load
mPubMasterKeyIds = getActivity().getIntent().getLongArrayExtra(EXTRA_KEY_IDS); mPubMasterKeyIds = getActivity().getIntent().getLongArrayExtra(EXTRA_KEY_IDS);
if (mPubMasterKeyIds == null) { if (mPubMasterKeyIds == null) {
Log.e(Constants.TAG, "List of key ids to certify missing!"); Timber.e("List of key ids to certify missing!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -184,7 +181,7 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load
// Remember for next loop // Remember for next loop
lastName = name; lastName = name;
Log.d(Constants.TAG, Long.toString(masterKeyId, 16) + (grouped ? "grouped" : "not grouped")); Timber.d(Long.toString(masterKeyId, 16) + (grouped ? "grouped" : "not grouped"));
if (!subGrouped) { if (!subGrouped) {
// 1. This name should NOT be grouped with the previous, so we flush the buffer // 1. This name should NOT be grouped with the previous, so we flush the buffer

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