summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZoltan Szatmary-Ban <szatmz@google.com>2014-08-15 13:00:27 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-15 04:38:54 +0000
commit4431d5ddf43445ee023f6e43608517911f6e0cb5 (patch)
tree5998dd3b85940a1470be88d9392eb2c4d5c225c4 /src
parent087077bf2f484efa86c78326ccf8e76e9ddff4ed (diff)
parent031612ec11a5bd212a1cdcb824576d5542270b2d (diff)
downloadandroid_packages_apps_KeyChain-4431d5ddf43445ee023f6e43608517911f6e0cb5.tar.gz
android_packages_apps_KeyChain-4431d5ddf43445ee023f6e43608517911f6e0cb5.tar.bz2
android_packages_apps_KeyChain-4431d5ddf43445ee023f6e43608517911f6e0cb5.zip
Merge "Update Trusted Credentials screen in settings" into lmp-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/keychain/KeyChainService.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/com/android/keychain/KeyChainService.java b/src/com/android/keychain/KeyChainService.java
index 2564d03..8209b5a 100644
--- a/src/com/android/keychain/KeyChainService.java
+++ b/src/com/android/keychain/KeyChainService.java
@@ -21,6 +21,7 @@ import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
@@ -34,11 +35,18 @@ import android.security.IKeyChainService;
import android.security.KeyChain;
import android.security.KeyStore;
import android.util.Log;
+import com.android.internal.util.ParcelableString;
+
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.cert.CertificateException;
+import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
import com.android.org.conscrypt.TrustedCertificateStore;
@@ -226,6 +234,80 @@ public class KeyChainService extends IntentService {
setGrantInternal(mDatabaseHelper.getWritableDatabase(), uid, alias, value);
broadcastStorageChange();
}
+
+ @Override
+ public ParceledListSlice<ParcelableString> getUserCaAliases() {
+ synchronized (mTrustedCertificateStore) {
+ Set<String> aliasSet = mTrustedCertificateStore.userAliases();
+ List<ParcelableString> aliases = new ArrayList<ParcelableString>(aliasSet.size());
+ for (String alias : aliasSet) {
+ ParcelableString parcelableString = new ParcelableString();
+ parcelableString.string = alias;
+ aliases.add(parcelableString);
+ }
+ return new ParceledListSlice<ParcelableString>(aliases);
+ }
+ }
+
+ @Override
+ public ParceledListSlice<ParcelableString> getSystemCaAliases() {
+ synchronized (mTrustedCertificateStore) {
+ Set<String> aliasSet = mTrustedCertificateStore.allSystemAliases();
+ List<ParcelableString> aliases = new ArrayList<ParcelableString>(aliasSet.size());
+ for (String alias : aliasSet) {
+ ParcelableString parcelableString = new ParcelableString();
+ parcelableString.string = alias;
+ aliases.add(parcelableString);
+ }
+ return new ParceledListSlice<ParcelableString>(aliases);
+ }
+ }
+
+ @Override
+ public boolean containsCaAlias(String alias) {
+ return mTrustedCertificateStore.containsAlias(alias);
+ }
+
+ @Override
+ public byte[] getEncodedCaCertificate(String alias, boolean includeDeletedSystem) {
+ synchronized (mTrustedCertificateStore) {
+ X509Certificate certificate = (X509Certificate) mTrustedCertificateStore
+ .getCertificate(alias, includeDeletedSystem);
+ if (certificate == null) {
+ return null;
+ }
+ try {
+ return certificate.getEncoded();
+ } catch (CertificateEncodingException e) {
+ return null;
+ }
+ }
+ }
+
+ @Override
+ public List<String> getCaCertificateChainAliases(String rootAlias,
+ boolean includeDeletedSystem) {
+ synchronized (mTrustedCertificateStore) {
+ X509Certificate root = (X509Certificate) mTrustedCertificateStore.getCertificate(
+ rootAlias, includeDeletedSystem);
+ try {
+ List<X509Certificate> chain = mTrustedCertificateStore.getCertificateChain(
+ root);
+ List<String> aliases = new ArrayList<String>(chain.size());
+ final int n = chain.size();
+ for (int i = 0; i < n; ++i) {
+ String alias = mTrustedCertificateStore.getCertificateAlias(chain.get(i),
+ true);
+ if (alias != null) {
+ aliases.add(alias);
+ }
+ }
+ return aliases;
+ } catch (CertificateException e) {
+ return Collections.emptyList();
+ }
+ }
+ }
};
private boolean hasGrantInternal(final SQLiteDatabase db, final int uid, final String alias) {