diff options
author | Chung-yih Wang <cywang@google.com> | 2009-07-22 05:31:48 +0800 |
---|---|---|
committer | Chung-yih Wang <cywang@google.com> | 2009-07-22 05:35:20 +0800 |
commit | 22726cf8174fe00a097c89b8da397b10626cdd00 (patch) | |
tree | f724f69a84275a72f1b0f0d7949740b418c17bb2 | |
parent | 8ece3445e8c95d02a47737ea2ac2d52a696143cd (diff) | |
download | frameworks_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.java | 38 |
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; |