diff options
author | Zoltan Szatmary-Ban <szatmz@google.com> | 2014-08-15 13:00:27 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-15 04:38:54 +0000 |
commit | 4431d5ddf43445ee023f6e43608517911f6e0cb5 (patch) | |
tree | 5998dd3b85940a1470be88d9392eb2c4d5c225c4 /src | |
parent | 087077bf2f484efa86c78326ccf8e76e9ddff4ed (diff) | |
parent | 031612ec11a5bd212a1cdcb824576d5542270b2d (diff) | |
download | android_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.java | 82 |
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) { |