Index: net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java |
diff --git a/net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java b/net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java |
index 28208a76bdbdfb58be8baf453894798a362f66ff..ff05ec84d2610790c4d939b262193bd557eff2a7 100644 |
--- a/net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java |
+++ b/net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java |
@@ -7,6 +7,7 @@ package org.chromium.net; |
import android.content.ActivityNotFoundException; |
import android.content.Context; |
import android.content.Intent; |
+import android.security.KeyChain; |
import android.util.Log; |
import org.chromium.base.CalledByNative; |
@@ -30,24 +31,31 @@ class AndroidNetworkLibrary { |
private static final String TAG = AndroidNetworkLibrary.class.getName(); |
/** |
- * Stores the key pair into the CertInstaller application. |
+ * Stores the key pair through the CertInstaller activity. |
+ * @param context: current application context. |
+ * @param public_key: The public key bytes as DER-encoded SubjectPublicKeyInfo (X.509) |
+ * @param private_key: The private key as DER-encoded PrivateKeyInfo (PKCS#8). |
+ * @return: true on success, false on failure. |
+ * |
+ * Note that failure means that the function could not launch the CertInstaller |
+ * activity. Whether the keys are valid or properly installed will be indicated |
+ * by the CertInstaller UI itself. |
*/ |
@CalledByNative |
static public boolean storeKeyPair(Context context, byte[] public_key, byte[] private_key) { |
- // This is based on android.security.Credentials.install() |
- // TODO(joth): Use KeyChain API instead of hard-coding constants here: |
- // http://crbug.com/124660 |
+ // TODO(digit): Use KeyChain official extra values to pass the public and private |
+ // keys when they're available. The "KEY" and "PKEY" hard-coded constants were taken |
+ // from the platform sources, since there are no official KeyChain.EXTRA_XXX definitions |
+ // for them. b/5859651 |
try { |
- Intent intent = new Intent("android.credentials.INSTALL"); |
- intent.setClassName("com.android.certinstaller", |
- "com.android.certinstaller.CertInstallerMain"); |
- intent.putExtra("KEY", private_key); |
- intent.putExtra("PKEY", public_key); |
+ Intent intent = KeyChain.createInstallIntent(); |
+ intent.putExtra("PKEY", private_key); |
+ intent.putExtra("KEY", public_key); |
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
context.startActivity(intent); |
return true; |
} catch (ActivityNotFoundException e) { |
- Log.w(TAG, "could not store certificate: " + e); |
+ Log.w(TAG, "could not store key pair: " + e); |
} |
return false; |
} |