summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChung-yih Wang <cywang@google.com>2009-07-22 05:31:48 +0800
committerChung-yih Wang <cywang@google.com>2009-07-22 05:35:20 +0800
commit22726cf8174fe00a097c89b8da397b10626cdd00 (patch)
treef724f69a84275a72f1b0f0d7949740b418c17bb2
parent8ece3445e8c95d02a47737ea2ac2d52a696143cd (diff)
downloadframeworks_base-22726cf8174fe00a097c89b8da397b10626cdd00.zip
frameworks_base-22726cf8174fe00a097c89b8da397b10626cdd00.tar.gz
frameworks_base-22726cf8174fe00a097c89b8da397b10626cdd00.tar.bz2
Return error codes for storing the key/cert in addPkcs12Keystore()
-rw-r--r--keystore/java/android/security/CertTool.java38
1 files changed, 28 insertions, 10 deletions
diff --git a/keystore/java/android/security/CertTool.java b/keystore/java/android/security/CertTool.java
index c96cd4f..79418bd 100644
--- a/keystore/java/android/security/CertTool.java
+++ b/keystore/java/android/security/CertTool.java
@@ -53,6 +53,7 @@ public class CertTool {
public static final String TITLE_USER_CERT = "User Certificate";
public static final String TITLE_PKCS12_KEYSTORE = "PKCS12 Keystore";
public static final String TITLE_PRIVATE_KEY = "Private Key";
+ public static final int INCORRECT_PKCS12_PASSPHRASE = -100;
private static final String TAG = "CertTool";
private static final String UNKNOWN = "Unknown";
@@ -143,30 +144,47 @@ public class CertTool {
intent.putExtra(KEY_NAMESPACE + "1", namespace);
}
- public int addPkcs12Keystore(byte[] p12Data, String password,
- String keyname) {
- int handle, i = 0;
+ private int extractAndStoreKeysFromPkcs12(int handle, String keyname) {
+ int ret, i = 0;
String pemData;
- Log.i("CertTool", "addPkcs12Keystore()");
- if ((handle = getPkcs12Handle(p12Data, password)) == 0) return -1;
if ((pemData = getPkcs12Certificate(handle)) != null) {
- sKeystore.put(USER_CERTIFICATE, keyname, pemData);
+ if ((ret = sKeystore.put(USER_CERTIFICATE, keyname, pemData)) != 0) {
+ return ret;
+ }
}
if ((pemData = getPkcs12PrivateKey(handle)) != null) {
- sKeystore.put(USER_KEY, keyname, pemData);
+ if ((ret = sKeystore.put(USER_KEY, keyname, pemData)) != 0) {
+ return ret;
+ }
}
while ((pemData = this.popPkcs12CertificateStack(handle)) != null) {
if (i++ > 0) {
- sKeystore.put(CA_CERTIFICATE, keyname + i, pemData);
+ if ((ret = sKeystore.put(CA_CERTIFICATE, keyname + i, pemData)) != 0) {
+ return ret;
+ }
} else {
- sKeystore.put(CA_CERTIFICATE, keyname, pemData);
+ if ((ret = sKeystore.put(CA_CERTIFICATE, keyname, pemData)) != 0) {
+ return ret;
+ }
}
}
- freePkcs12Handle(handle);
return 0;
}
+ public int addPkcs12Keystore(byte[] p12Data, String password,
+ String keyname) {
+ int handle, ret;
+ Log.i("CertTool", "addPkcs12Keystore()");
+
+ if ((handle = getPkcs12Handle(p12Data, password)) == 0) {
+ return INCORRECT_PKCS12_PASSPHRASE;
+ }
+ ret = extractAndStoreKeysFromPkcs12(handle, keyname);
+ freePkcs12Handle(handle);
+ return ret;
+ }
+
public synchronized void addCertificate(byte[] data, Context context) {
int handle;
Intent intent = null;