summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2020-07-30 23:14:20 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-07-30 23:14:20 +0000
commitf2791468e74b6ab40bb6bea5f9920ad2e9d7d3a6 (patch)
tree1328fb633db2a6e8d3ed449817bdb1d03eb8ec2c /src
parentc3288adee0bb55980e4748632fbaceeec4bc53c3 (diff)
parentb0cf1c9abbd9c0e198bc6ae88fe5f9bf41b8fbb3 (diff)
downloadplatform_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.java37
-rw-r--r--src/com/android/certinstaller/CredentialHelper.java51
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;
+ }
}