diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-07-30 23:14:20 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-07-30 23:14:20 +0000 |
| commit | f2791468e74b6ab40bb6bea5f9920ad2e9d7d3a6 (patch) | |
| tree | 1328fb633db2a6e8d3ed449817bdb1d03eb8ec2c /src | |
| parent | c3288adee0bb55980e4748632fbaceeec4bc53c3 (diff) | |
| parent | b0cf1c9abbd9c0e198bc6ae88fe5f9bf41b8fbb3 (diff) | |
| download | platform_packages_apps_CertInstaller-f2791468e74b6ab40bb6bea5f9920ad2e9d7d3a6.tar.gz platform_packages_apps_CertInstaller-f2791468e74b6ab40bb6bea5f9920ad2e9d7d3a6.tar.bz2 platform_packages_apps_CertInstaller-f2791468e74b6ab40bb6bea5f9920ad2e9d7d3a6.zip | |
Merge "Refactor CredentialHelper Constructor"
Diffstat (limited to 'src')
| -rw-r--r-- | src/com/android/certinstaller/CertInstaller.java | 37 | ||||
| -rw-r--r-- | src/com/android/certinstaller/CredentialHelper.java | 51 |
2 files changed, 63 insertions, 25 deletions
diff --git a/src/com/android/certinstaller/CertInstaller.java b/src/com/android/certinstaller/CertInstaller.java index 3a6b7b3..bc0b17e 100644 --- a/src/com/android/certinstaller/CertInstaller.java +++ b/src/com/android/certinstaller/CertInstaller.java @@ -29,6 +29,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Process; import android.security.Credentials; import android.security.KeyChain; import android.security.KeyChain.KeyChainConnection; @@ -41,7 +42,11 @@ import android.widget.EditText; import android.widget.RadioGroup; import android.widget.Toast; +import com.android.internal.annotations.VisibleForTesting; + import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; /** * Installs certificates to the system keystore. @@ -73,7 +78,32 @@ public class CertInstaller extends Activity { private CredentialHelper createCredentialHelper(Intent intent) { try { - return new CredentialHelper(intent); + Bundle bundle = intent.getExtras(); + if (bundle == null) { + return new CredentialHelper(); + } else { + int size = bundle.size(); + Log.d(TAG, "# extras: " + size); + + String name = bundle.getString(KeyChain.EXTRA_NAME); + bundle.remove(KeyChain.EXTRA_NAME); + + String referrer = bundle.getString(Intent.EXTRA_REFERRER); + bundle.remove(Intent.EXTRA_REFERRER); + + String certUsageSelected = bundle.getString(Credentials.EXTRA_CERTIFICATE_USAGE); + bundle.remove(Credentials.EXTRA_CERTIFICATE_USAGE); + + int uid = bundle.getInt(Credentials.EXTRA_INSTALL_AS_UID, Process.INVALID_UID); + bundle.remove(Credentials.EXTRA_INSTALL_AS_UID); + + Map<String, byte[]> byteMap = new HashMap<>(); + for (String key : bundle.keySet()) { + byte[] bytes = bundle.getByteArray(key); + byteMap.put(key, bytes); + } + return new CredentialHelper(byteMap, name, referrer, certUsageSelected, uid); + } } catch (Throwable t) { Log.w(TAG, "createCredentialHelper", t); toastErrorAndFinish(R.string.invalid_cert); @@ -564,4 +594,9 @@ public class CertInstaller extends Activity { host.onExtractionDone(mSuccess); } } + + @VisibleForTesting + public CredentialHelper getCredentials() { + return mCredentials; + } } diff --git a/src/com/android/certinstaller/CredentialHelper.java b/src/com/android/certinstaller/CredentialHelper.java index a1e9314..45791e9 100644 --- a/src/com/android/certinstaller/CredentialHelper.java +++ b/src/com/android/certinstaller/CredentialHelper.java @@ -17,7 +17,8 @@ package com.android.certinstaller; import static android.security.KeyStore.UID_SELF; - +import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.KeyguardManager; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; @@ -34,6 +35,7 @@ import android.text.Html; import android.text.TextUtils; import android.util.Log; +import com.android.internal.annotations.VisibleForTesting; import com.android.org.bouncycastle.asn1.ASN1InputStream; import com.android.org.bouncycastle.asn1.ASN1Sequence; import com.android.org.bouncycastle.asn1.DEROctetString; @@ -59,6 +61,7 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * A helper class for accessing the raw data in the intent extra and handling @@ -78,7 +81,7 @@ class CredentialHelper { private String mName = ""; private String mCertUsageSelected = ""; private String mReferrer = ""; - private int mUid = -1; + private int mUid = Process.INVALID_UID; private PrivateKey mUserKey; private X509Certificate mUserCert; private List<X509Certificate> mCaCerts = new ArrayList<X509Certificate>(); @@ -86,36 +89,31 @@ class CredentialHelper { CredentialHelper() { } - CredentialHelper(Intent intent) { - Bundle bundle = intent.getExtras(); - if (bundle == null) { - return; - } - - String name = bundle.getString(KeyChain.EXTRA_NAME); - bundle.remove(KeyChain.EXTRA_NAME); + /** + * @param byteMap keeps raw data from intent's extra + * @param name + * @param referrer + * @param certUsageSelected used to assign mUid according to certificate usage + * @param uid is ignored unless certUsageSelected is null + */ + CredentialHelper(@NonNull Map<String, byte[]> byteMap, @Nullable String name, + @Nullable String referrer, @Nullable String certUsageSelected, int uid) { if (name != null) { mName = name; } - String certUsageSelected = bundle.getString(Credentials.EXTRA_CERTIFICATE_USAGE); - bundle.remove(Credentials.EXTRA_CERTIFICATE_USAGE); + if (referrer != null) { + mReferrer = referrer; + } + if (certUsageSelected != null) { setCertUsageSelectedAndUid(certUsageSelected); } else { - mUid = bundle.getInt(Credentials.EXTRA_INSTALL_AS_UID, -1); - } - bundle.remove(Credentials.EXTRA_INSTALL_AS_UID); - - String referrer = bundle.getString(Intent.EXTRA_REFERRER); - bundle.remove(Intent.EXTRA_REFERRER); - if (referrer != null) { - mReferrer = referrer; + mUid = uid; } - Log.d(TAG, "# extras: " + bundle.size()); - for (String key : bundle.keySet()) { - byte[] bytes = bundle.getByteArray(key); + for (String key : byteMap.keySet()) { + byte[] bytes = byteMap.get(key); Log.d(TAG, " " + key + ": " + ((bytes == null) ? -1 : bytes.length)); mBundle.put(key, bytes); } @@ -149,7 +147,7 @@ class CredentialHelper { void onRestoreStates(Bundle savedStates) { mBundle = (HashMap) savedStates.getSerializable(DATA_KEY); mName = savedStates.getString(KeyChain.EXTRA_NAME); - mUid = savedStates.getInt(Credentials.EXTRA_INSTALL_AS_UID, -1); + mUid = savedStates.getInt(Credentials.EXTRA_INSTALL_AS_UID, Process.INVALID_UID); String userKeyAlgorithm = savedStates.getString(USER_KEY_ALGORITHM); byte[] userKeyBytes = savedStates.getByteArray(Credentials.USER_PRIVATE_KEY); Log.d(TAG, "Loaded key algorithm: " + userKeyAlgorithm); @@ -475,4 +473,9 @@ class CredentialHelper { public String getReferrer() { return mReferrer; } + + @VisibleForTesting + public int getUid() { + return mUid; + } } |
