Code formatting and package re-structuring

This commit is contained in:
Dominik Schürmann
2017-01-05 13:56:09 +01:00
parent b89ba85313
commit 63244a113a
35 changed files with 131 additions and 142 deletions

View File

@@ -105,7 +105,7 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<!-- broadcast receiver for Orbots status --> <!-- broadcast receiver for Orbots status -->
<receiver android:name=".util.orbot.OrbotStatusReceiver"> <receiver android:name=".network.orbot.OrbotStatusReceiver">
<intent-filter> <intent-filter>
<action android:name="org.torproject.android.intent.action.STATUS"/> <action android:name="org.torproject.android.intent.action.STATUS"/>
</intent-filter> </intent-filter>

View File

@@ -40,7 +40,7 @@ import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.util.Log; 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 org.sufficientlysecure.keychain.util.TlsHelper; import org.sufficientlysecure.keychain.network.TlsCertificatePinning;
import java.security.Security; import java.security.Security;
import java.util.HashMap; import java.util.HashMap;
@@ -114,9 +114,9 @@ public class KeychainApplication extends Application {
// Update keyserver list as needed // Update keyserver list as needed
Preferences.getPreferences(this).upgradePreferences(this); Preferences.getPreferences(this).upgradePreferences(this);
TlsHelper.addPinnedCertificate("hkps.pool.sks-keyservers.net", getAssets(), "hkps.pool.sks-keyservers.net.CA.cer"); TlsCertificatePinning.addPinnedCertificate("hkps.pool.sks-keyservers.net", getAssets(), "hkps.pool.sks-keyservers.net.CA.cer");
TlsHelper.addPinnedCertificate("pgp.mit.edu", getAssets(), "pgp.mit.edu.cer"); TlsCertificatePinning.addPinnedCertificate("pgp.mit.edu", getAssets(), "pgp.mit.edu.cer");
TlsHelper.addPinnedCertificate("api.keybase.io", getAssets(), "api.keybase.io.CA.cer"); TlsCertificatePinning.addPinnedCertificate("api.keybase.io", getAssets(), "api.keybase.io.CA.cer");
TemporaryFileProvider.cleanUp(this); TemporaryFileProvider.cleanUp(this);

View File

@@ -30,9 +30,9 @@ 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.Log;
import org.sufficientlysecure.keychain.util.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.TlsHelper; import org.sufficientlysecure.keychain.network.TlsCertificatePinning;
import java.io.IOException; import java.io.IOException;
import java.net.Proxy; import java.net.Proxy;
@@ -128,7 +128,7 @@ public class FacebookKeyserver extends Keyserver {
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()));
} catch (TlsHelper.TlsHelperException e) { } catch (TlsCertificatePinning.TlsCertificatePinningException e) {
Log.e(Constants.TAG, "Exception in cert pinning", e); Log.e(Constants.TAG, "Exception in cert pinning", e);
throw new QueryFailedException("Exception in cert pinning."); throw new QueryFailedException("Exception in cert pinning.");
} }

View File

@@ -25,7 +25,7 @@ import com.textuality.keybase.lib.User;
import org.sufficientlysecure.keychain.Constants; 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.util.Log;
import org.sufficientlysecure.keychain.util.OkHttpKeybaseClient; import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -54,9 +54,9 @@ import org.sufficientlysecure.keychain.Constants;
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.Log;
import org.sufficientlysecure.keychain.util.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.TlsHelper; import org.sufficientlysecure.keychain.network.TlsCertificatePinning;
public class ParcelableHkpKeyserver extends Keyserver implements Parcelable { public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
@@ -228,7 +228,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
Log.e(Constants.TAG, "IOException at HkpKeyserver", e); Log.e(Constants.TAG, "IOException at HkpKeyserver", e);
throw new Keyserver.QueryFailedException("Keyserver '" + mUrl + "' is unavailable. Check your Internet connection!" + throw new Keyserver.QueryFailedException("Keyserver '" + mUrl + "' is unavailable. Check your Internet connection!" +
(proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy())); (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy()));
} catch (TlsHelper.TlsHelperException e) { } catch (TlsCertificatePinning.TlsCertificatePinningException e) {
Log.e(Constants.TAG, "Exception in pinning certs", e); Log.e(Constants.TAG, "Exception in pinning certs", e);
throw new Keyserver.QueryFailedException("Exception in pinning certs"); throw new Keyserver.QueryFailedException("Exception in pinning certs");
} catch (UnsupportedCharsetException e) { } catch (UnsupportedCharsetException e) {
@@ -439,7 +439,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Log.e(Constants.TAG, "IOException", e);
throw new Keyserver.AddKeyException(); throw new Keyserver.AddKeyException();
} catch (TlsHelper.TlsHelperException e) { } catch (TlsCertificatePinning.TlsCertificatePinningException e) {
Log.e(Constants.TAG, "Exception in pinning certs", e); Log.e(Constants.TAG, "Exception in pinning certs", e);
throw new Keyserver.AddKeyException(); throw new Keyserver.AddKeyException();
} catch (URISyntaxException e) { } catch (URISyntaxException e) {

View File

@@ -33,7 +33,7 @@ import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.util.Log; 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.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -33,7 +33,7 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult.LogTyp
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.util.Log;
import org.sufficientlysecure.keychain.util.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;

View File

@@ -15,7 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.network;
import java.io.IOException; import java.io.IOException;
import java.net.Proxy; import java.net.Proxy;
@@ -47,7 +47,7 @@ public class OkHttpClientFactory {
} }
public static OkHttpClient getClientPinnedIfAvailable(URL url, Proxy proxy) public static OkHttpClient getClientPinnedIfAvailable(URL url, Proxy proxy)
throws IOException, TlsHelper.TlsHelperException { throws IOException, TlsCertificatePinning.TlsCertificatePinningException {
OkHttpClient.Builder builder = new OkHttpClient.Builder(); OkHttpClient.Builder builder = new OkHttpClient.Builder();
// don't follow any redirects for keyservers, as discussed in the security audit // don't follow any redirects for keyservers, as discussed in the security audit
@@ -66,8 +66,8 @@ public class OkHttpClientFactory {
// If a pinned cert is available, use it! // If a pinned cert is available, use it!
// NOTE: this fails gracefully back to "no pinning" if no cert is available. // NOTE: this fails gracefully back to "no pinning" if no cert is available.
if (url != null && TlsHelper.getPinnedSslSocketFactory(url) != null) { if (url != null && TlsCertificatePinning.getPinnedSslSocketFactory(url) != null) {
builder.sslSocketFactory(TlsHelper.getPinnedSslSocketFactory(url)); builder.sslSocketFactory(TlsCertificatePinning.getPinnedSslSocketFactory(url));
} }
return builder.build(); return builder.build();

View File

@@ -15,8 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.network;
import com.textuality.keybase.lib.KeybaseUrlConnectionClient; import com.textuality.keybase.lib.KeybaseUrlConnectionClient;
@@ -24,6 +23,7 @@ import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException; import java.io.IOException;
import java.net.Proxy; import java.net.Proxy;
@@ -44,7 +44,7 @@ public class OkHttpKeybaseClient implements KeybaseUrlConnectionClient {
} else { } else {
client = OkHttpClientFactory.getSimpleClient(); client = OkHttpClientFactory.getSimpleClient();
} }
} catch (TlsHelper.TlsHelperException e) { } catch (TlsCertificatePinning.TlsCertificatePinningException e) {
Log.e(Constants.TAG, "TlsHelper failed", e); Log.e(Constants.TAG, "TlsHelper failed", e);
throw new IOException("TlsHelper failed"); throw new IOException("TlsHelper failed");
} }

View File

@@ -15,11 +15,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.network;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import org.sufficientlysecure.keychain.Constants; 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;
@@ -40,7 +41,7 @@ import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.TrustManagerFactory;
public class TlsHelper { public class TlsCertificatePinning {
private static Map<String, byte[]> sPinnedCertificates = new HashMap<>(); private static Map<String, byte[]> sPinnedCertificates = new HashMap<>();
@@ -70,10 +71,10 @@ public class TlsHelper {
* Use pinned certificate for OkHttpClient if we have one. * Use pinned certificate for OkHttpClient if we have one.
* *
* @return true, if certificate is available, false if not * @return true, if certificate is available, false if not
* @throws TlsHelperException * @throws TlsCertificatePinningException
* @throws IOException * @throws IOException
*/ */
public static SSLSocketFactory getPinnedSslSocketFactory(URL url) throws TlsHelperException, IOException { public static SSLSocketFactory getPinnedSslSocketFactory(URL url) throws TlsCertificatePinningException, IOException {
if (url.getProtocol().equals("https")) { if (url.getProtocol().equals("https")) {
// use certificate PIN from assets if we have one // use certificate PIN from assets if we have one
for (String host : sPinnedCertificates.keySet()) { for (String host : sPinnedCertificates.keySet()) {
@@ -92,11 +93,11 @@ public class TlsHelper {
* to URLs with passed certificate. * to URLs with passed certificate.
* *
* @param certificate certificate to pin * @param certificate certificate to pin
* @throws TlsHelperException * @throws TlsCertificatePinningException
* @throws IOException * @throws IOException
*/ */
private static SSLSocketFactory pinCertificate(byte[] certificate) private static SSLSocketFactory pinCertificate(byte[] certificate)
throws TlsHelperException, IOException { throws TlsCertificatePinningException, IOException {
// 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.
// (Refer to note at end of description: // (Refer to note at end of description:
@@ -124,12 +125,12 @@ public class TlsHelper {
return context.getSocketFactory(); return context.getSocketFactory();
} catch (CertificateException | KeyStoreException | KeyManagementException | NoSuchAlgorithmException e) { } catch (CertificateException | KeyStoreException | KeyManagementException | NoSuchAlgorithmException e) {
throw new TlsHelperException(e); throw new TlsCertificatePinningException(e);
} }
} }
public static class TlsHelperException extends Exception { public static class TlsCertificatePinningException extends Exception {
public TlsHelperException(Exception e) { TlsCertificatePinningException(Exception e) {
super(e); super(e);
} }
} }

View File

@@ -47,7 +47,7 @@
***** *****
*/ */
package org.sufficientlysecure.keychain.util.orbot; package org.sufficientlysecure.keychain.network.orbot;
import android.app.Activity; import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;

View File

@@ -13,7 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.sufficientlysecure.keychain.util.orbot; package org.sufficientlysecure.keychain.network.orbot;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;

View File

@@ -50,10 +50,9 @@ 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 org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.io.IOException; import java.io.IOException;
import java.net.Proxy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Iterator; import java.util.Iterator;

View File

@@ -40,9 +40,9 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.KeybaseVerificationParcel; import org.sufficientlysecure.keychain.service.KeybaseVerificationParcel;
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.OkHttpKeybaseClient; import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;

View File

@@ -45,7 +45,7 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; 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.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;

View File

@@ -42,7 +42,9 @@ public class ECKeyFormat extends KeyFormat {
return mECAlgorithmFormat; return mECAlgorithmFormat;
} }
public ASN1ObjectIdentifier getCurveOID() { return mECCurveOID; } public ASN1ObjectIdentifier getCurveOID() {
return mECCurveOID;
}
public enum ECAlgorithmFormat { public enum ECAlgorithmFormat {
ECDH((byte) 18, true, false), ECDH((byte) 18, true, false),
@@ -69,9 +71,17 @@ public class ECKeyFormat extends KeyFormat {
return null; return null;
} }
public final byte getValue() { return mValue; } public final byte getValue() {
public final boolean isECDH() { return mIsECDH; } return mValue;
public final boolean isWithPubkey() { return mWithPubkey; } }
public final boolean isECDH() {
return mIsECDH;
}
public final boolean isWithPubkey() {
return mWithPubkey;
}
} }
public void addToSaveKeyringParcel(SaveKeyringParcel keyring, int keyFlags) { public void addToSaveKeyringParcel(SaveKeyringParcel keyring, int keyFlags) {

View File

@@ -13,7 +13,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.securitytoken;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;

View File

@@ -17,8 +17,6 @@
package org.sufficientlysecure.keychain.securitytoken; package org.sufficientlysecure.keychain.securitytoken;
import org.sufficientlysecure.keychain.util.Iso7816TLV;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

View File

@@ -71,7 +71,9 @@ public class RSAKeyFormat extends KeyFormat {
return null; return null;
} }
public byte getValue() { return mValue; } public byte getValue() {
return mValue;
}
public boolean isIncludeModulus() { public boolean isIncludeModulus() {
return mIncludeModulus; return mIncludeModulus;

View File

@@ -18,9 +18,7 @@
package org.sufficientlysecure.keychain.securitytoken; package org.sufficientlysecure.keychain.securitytoken;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log;
import org.bouncycastle.asn1.nist.NISTNamedCurves; import org.bouncycastle.asn1.nist.NISTNamedCurves;
import org.bouncycastle.asn1.x9.ECNamedCurveTable; import org.bouncycastle.asn1.x9.ECNamedCurveTable;
@@ -28,19 +26,11 @@ import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.math.ec.ECCurve; import org.bouncycastle.math.ec.ECCurve;
import org.bouncycastle.math.ec.ECPoint; import org.bouncycastle.math.ec.ECPoint;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.Iterable;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.ui.SettingsSmartPGPAuthoritiesActivity; import org.sufficientlysecure.keychain.ui.SettingsSmartPGPAuthoritiesActivity;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Iso7816TLV;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.SecurityTokenUtils;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.security.AlgorithmParameters; import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException; import java.security.InvalidAlgorithmParameterException;
@@ -55,7 +45,6 @@ import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException; import java.security.NoSuchProviderException;
import java.security.PublicKey; import java.security.PublicKey;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.SignatureException;
import java.security.cert.CertPathBuilder; import java.security.cert.CertPathBuilder;
import java.security.cert.CertPathBuilderException; import java.security.cert.CertPathBuilderException;
import java.security.cert.CertStore; import java.security.cert.CertStore;
@@ -65,7 +54,6 @@ import java.security.cert.CertificateFactory;
import java.security.cert.CollectionCertStoreParameters; import java.security.cert.CollectionCertStoreParameters;
import java.security.cert.PKIXBuilderParameters; import java.security.cert.PKIXBuilderParameters;
import java.security.cert.PKIXCertPathBuilderResult; import java.security.cert.PKIXCertPathBuilderResult;
import java.security.cert.TrustAnchor;
import java.security.cert.X509CertSelector; import java.security.cert.X509CertSelector;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPrivateKey;
@@ -75,10 +63,6 @@ import java.security.spec.ECParameterSpec;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
import java.security.spec.InvalidParameterSpecException; import java.security.spec.InvalidParameterSpecException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.crypto.BadPaddingException; import javax.crypto.BadPaddingException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
@@ -89,7 +73,6 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.TrustManagerFactory;
import javax.smartcardio.CommandAPDU; import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU; import javax.smartcardio.ResponseAPDU;

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2016 Nikita Mikhailov <nikita.s.mikhailov@gmail.com> * Copyright (C) 2016 Nikita Mikhailov <nikita.s.mikhailov@gmail.com>
* Copyright (C) 2013-2015 Dominik Schürmann <dominik@dominikschuermann.de> * Copyright (C) 2013-2017 Dominik Schürmann <dominik@dominikschuermann.de>
* Copyright (C) 2015 Vincent Breitmoser <v.breitmoser@mugenguild.com> * Copyright (C) 2015 Vincent Breitmoser <v.breitmoser@mugenguild.com>
* Copyright (C) 2013-2014 Signe Rüsch * Copyright (C) 2013-2014 Signe Rüsch
* Copyright (C) 2013-2014 Philipp Jakubeit * Copyright (C) 2013-2014 Philipp Jakubeit
@@ -48,11 +48,10 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import javax.smartcardio.CommandAPDU; import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU; import javax.smartcardio.ResponseAPDU;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException;
import org.sufficientlysecure.keychain.util.Iso7816TLV;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.SecurityTokenUtils;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -101,7 +100,7 @@ public class SecurityTokenHelper {
private boolean mPw1ValidatedForDecrypt; // Mode 82 does other things; consider renaming? private boolean mPw1ValidatedForDecrypt; // Mode 82 does other things; consider renaming?
private boolean mPw3Validated; private boolean mPw3Validated;
protected SecurityTokenHelper() { private SecurityTokenHelper() {
} }
public static double parseOpenPgpVersion(final byte[] aid) { public static double parseOpenPgpVersion(final byte[] aid) {
@@ -169,12 +168,14 @@ public class SecurityTokenHelper {
private boolean isSlotEmpty(KeyType keyType) throws IOException { private boolean isSlotEmpty(KeyType keyType) throws IOException {
// Note: special case: This should not happen, but happens with // Note: special case: This should not happen, but happens with
// https://github.com/FluffyKaon/OpenPGP-Card, thus for now assume true // https://github.com/FluffyKaon/OpenPGP-Card, thus for now assume true
if (getKeyFingerprint(keyType) == null) return true; if (getKeyFingerprint(keyType) == null) {
return true;
}
return keyMatchesFingerPrint(keyType, BLANK_FINGERPRINT); return keyMatchesFingerPrint(keyType, BLANK_FINGERPRINT);
} }
public boolean keyMatchesFingerPrint(KeyType keyType, byte[] fingerprint) throws IOException { private boolean keyMatchesFingerPrint(KeyType keyType, byte[] fingerprint) throws IOException {
return java.util.Arrays.equals(getKeyFingerprint(keyType), fingerprint); return java.util.Arrays.equals(getKeyFingerprint(keyType), fingerprint);
} }
@@ -276,7 +277,7 @@ public class SecurityTokenHelper {
byte[] data; byte[] data;
int pLen = 0; int pLen = 0;
X9ECParameters x9Params = null; X9ECParameters x9Params;
switch (kf.keyFormatType()) { switch (kf.keyFormatType()) {
case RSAKeyFormatType: case RSAKeyFormatType:
@@ -720,6 +721,7 @@ public class SecurityTokenHelper {
* Transceives APDU * Transceives APDU
* Splits extended APDU into short APDUs and chains them if necessary * Splits extended APDU into short APDUs and chains them if necessary
* Performs GET RESPONSE command(ISO/IEC 7816-4 par.7.6.1) on retrieving if necessary * Performs GET RESPONSE command(ISO/IEC 7816-4 par.7.6.1) on retrieving if necessary
*
* @param apdu short or extended APDU to transceive * @param apdu short or extended APDU to transceive
* @return response from the card * @return response from the card
* @throws IOException * @throws IOException

View File

@@ -15,7 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.securitytoken;
import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;

View File

@@ -15,7 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.securitytoken;
import android.app.Activity; import android.app.Activity;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@@ -27,6 +27,7 @@ import android.hardware.usb.UsbManager;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity; import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity;
import org.sufficientlysecure.keychain.util.Log;
public class UsbConnectionDispatcher { public class UsbConnectionDispatcher {
private Activity mActivity; private Activity mActivity;

View File

@@ -44,7 +44,7 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; 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.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2015 Dominik Schürmann <dominik@dominikschuermann.de> * Copyright (C) 2016 Dominik Schürmann <dominik@dominikschuermann.de>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -35,15 +35,12 @@ import org.sufficientlysecure.keychain.securitytoken.KeyFormat;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenHelper; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenHelper;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.util.Choice; import org.sufficientlysecure.keychain.util.Choice;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.SecurityTokenUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class CreateSecurityTokenAlgorithmFragment extends Fragment { public class CreateSecurityTokenAlgorithmFragment extends Fragment {
public enum SupportedKeyType { public enum SupportedKeyType {
RSA_2048, RSA_3072, RSA_4096, ECC_P256, ECC_P384, ECC_P521 RSA_2048, RSA_3072, RSA_4096, ECC_P256, ECC_P384, ECC_P521
} }
@@ -57,7 +54,6 @@ public class CreateSecurityTokenAlgorithmFragment extends Fragment {
private Spinner mDecKeySpinner; private Spinner mDecKeySpinner;
private Spinner mAuthKeySpinner; private Spinner mAuthKeySpinner;
/** /**
* Creates new instance of this fragment * Creates new instance of this fragment
*/ */
@@ -75,8 +71,8 @@ public class CreateSecurityTokenAlgorithmFragment extends Fragment {
final FragmentActivity context = getActivity(); final FragmentActivity context = getActivity();
View view = inflater.inflate(R.layout.create_yubi_key_algorithm_fragment, container, false); View view = inflater.inflate(R.layout.create_yubi_key_algorithm_fragment, container, false);
mBackButton = (TextView) view.findViewById(R.id.create_key_back_button); mBackButton = view.findViewById(R.id.create_key_back_button);
mNextButton = (TextView) view.findViewById(R.id.create_key_next_button); mNextButton = view.findViewById(R.id.create_key_next_button);
mBackButton.setOnClickListener(new View.OnClickListener() { mBackButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
@@ -163,10 +159,8 @@ public class CreateSecurityTokenAlgorithmFragment extends Fragment {
} }
private class TwoLineArrayAdapter extends ArrayAdapter<Choice<SupportedKeyType>> { private class TwoLineArrayAdapter extends ArrayAdapter<Choice<SupportedKeyType>> {
public TwoLineArrayAdapter(Context context, int resource, List<Choice<SupportedKeyType>> objects) { TwoLineArrayAdapter(Context context, int resource, List<Choice<SupportedKeyType>> objects) {
super(context, resource, objects); super(context, resource, objects);
} }

View File

@@ -52,7 +52,7 @@ import org.sufficientlysecure.keychain.ui.util.PermissionsUtil;
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.Preferences.CloudSearchPrefs; import org.sufficientlysecure.keychain.util.Preferences.CloudSearchPrefs;
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -35,7 +35,7 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
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.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
/** /**
* Simply encapsulates a dialog. If orbot is not installed, it shows an install dialog, else a * Simply encapsulates a dialog. If orbot is not installed, it shows an install dialog, else a

View File

@@ -56,7 +56,7 @@ import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver; import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.security.KeyStore; import java.security.KeyStore;
import java.security.KeyStoreException; import java.security.KeyStoreException;

View File

@@ -53,10 +53,10 @@ import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
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 org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.OkHttpKeybaseClient; import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient;
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.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Hashtable; import java.util.Hashtable;

View File

@@ -46,7 +46,7 @@ import org.sufficientlysecure.keychain.securitytoken.CardException;
import org.sufficientlysecure.keychain.securitytoken.NfcTransport; import org.sufficientlysecure.keychain.securitytoken.NfcTransport;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenHelper; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenHelper;
import org.sufficientlysecure.keychain.securitytoken.Transport; import org.sufficientlysecure.keychain.securitytoken.Transport;
import org.sufficientlysecure.keychain.util.UsbConnectionDispatcher; import org.sufficientlysecure.keychain.securitytoken.UsbConnectionDispatcher;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity; import org.sufficientlysecure.keychain.ui.CreateKeyActivity;
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity; import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;

View File

@@ -48,11 +48,11 @@ import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver; import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
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.TlsHelper; import org.sufficientlysecure.keychain.network.TlsCertificatePinning;
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -367,7 +367,7 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
// check TLS pinning only for non-Tor keyservers // check TLS pinning only for non-Tor keyservers
if (onlyTrustedKeyserver if (onlyTrustedKeyserver
&& TlsHelper.getPinnedSslSocketFactory(keyserverUriHttp.toURL()) == null) { && TlsCertificatePinning.getPinnedSslSocketFactory(keyserverUriHttp.toURL()) == null) {
Log.w(Constants.TAG, "No pinned certificate for this host in OpenKeychain's assets."); Log.w(Constants.TAG, "No pinned certificate for this host in OpenKeychain's assets.");
reason = VerifyReturn.NO_PINNED_CERTIFICATE; reason = VerifyReturn.NO_PINNED_CERTIFICATE;
return reason; return reason;
@@ -385,7 +385,7 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
keyserverUriOnion.toURL(), proxy.getProxy()); keyserverUriOnion.toURL(), proxy.getProxy());
clientTor.newCall(new Request.Builder().url(keyserverUriOnion.toURL()).build()).execute(); clientTor.newCall(new Request.Builder().url(keyserverUriOnion.toURL()).build()).execute();
} }
} catch (TlsHelper.TlsHelperException e) { } catch (TlsCertificatePinning.TlsCertificatePinningException e) {
reason = VerifyReturn.CONNECTION_FAILED; reason = VerifyReturn.CONNECTION_FAILED;
} catch (MalformedURLException | URISyntaxException e) { } catch (MalformedURLException | URISyntaxException e) {
Log.w(Constants.TAG, "Invalid keyserver URL entered by user."); Log.w(Constants.TAG, "Invalid keyserver URL entered by user.");

View File

@@ -36,7 +36,7 @@ import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
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.Log;
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
/** /**
* displays a dialog asking the user to enable Tor * displays a dialog asking the user to enable Tor

View File

@@ -38,6 +38,7 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;

View File

@@ -13,20 +13,19 @@
* limitations under the License. * limitations under the License.
*/ */
package org.sufficientlysecure.keychain.util; package org.sufficientlysecure.keychain.securitytoken;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowLog; import org.robolectric.shadows.ShadowLog;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.BuildConfig;
import org.sufficientlysecure.keychain.WorkaroundBuildConfig; import org.sufficientlysecure.keychain.WorkaroundBuildConfig;
import org.sufficientlysecure.keychain.util.Iso7816TLV.Iso7816CompositeTLV; import org.sufficientlysecure.keychain.securitytoken.Iso7816TLV;
import org.sufficientlysecure.keychain.securitytoken.Iso7816TLV.Iso7816CompositeTLV;
@RunWith(RobolectricGradleTestRunner.class) @RunWith(RobolectricGradleTestRunner.class)
@Config(constants = WorkaroundBuildConfig.class, sdk = 23, manifest = "src/main/AndroidManifest.xml") @Config(constants = WorkaroundBuildConfig.class, sdk = 23, manifest = "src/main/AndroidManifest.xml")

View File

@@ -30,7 +30,6 @@ import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowLog; import org.robolectric.shadows.ShadowLog;
import org.sufficientlysecure.keychain.WorkaroundBuildConfig; import org.sufficientlysecure.keychain.WorkaroundBuildConfig;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException;
import org.sufficientlysecure.keychain.util.SecurityTokenUtils;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;