summaryrefslogtreecommitdiffstats
path: root/keystore
diff options
context:
space:
mode:
authorOscar Montemayor <oam@google.com>2010-01-14 16:38:40 -0800
committerOscar Montemayor <oam@google.com>2010-01-15 11:16:31 -0800
commitb62e8132df0d19a39a700324475b3df2de78e0b0 (patch)
treee5679e990fc995de73fc2c35dd03082c0efd7ebb /keystore
parent013b9c249dbcb5ca293c5cfe6a0e7908ced32418 (diff)
downloadframeworks_base-b62e8132df0d19a39a700324475b3df2de78e0b0.zip
frameworks_base-b62e8132df0d19a39a700324475b3df2de78e0b0.tar.gz
frameworks_base-b62e8132df0d19a39a700324475b3df2de78e0b0.tar.bz2
Apps on SD card.
Added support for retrieving and generating keys as Hex Strings.
Diffstat (limited to 'keystore')
-rw-r--r--keystore/java/android/security/SystemKeyStore.java29
-rw-r--r--keystore/tests/src/android/security/SystemKeyStoreTest.java11
2 files changed, 39 insertions, 1 deletions
diff --git a/keystore/java/android/security/SystemKeyStore.java b/keystore/java/android/security/SystemKeyStore.java
index 452125a..61a4293 100644
--- a/keystore/java/android/security/SystemKeyStore.java
+++ b/keystore/java/android/security/SystemKeyStore.java
@@ -35,6 +35,7 @@ import javax.crypto.SecretKey;
public class SystemKeyStore {
private static final String SYSTEM_KEYSTORE_DIRECTORY = "misc/systemkeys";
+ private static final String KEY_FILE_EXTENSION = ".sks";
private static SystemKeyStore mInstance = new SystemKeyStore();
private SystemKeyStore() { }
@@ -43,6 +44,28 @@ public class SystemKeyStore {
return mInstance;
}
+ public static String toHexString(byte[] keyData) {
+ if (keyData == null) {
+ return null;
+ }
+ int keyLen = keyData.length;
+ int expectedStringLen = keyData.length * 2;
+ StringBuilder sb = new StringBuilder(expectedStringLen);
+ for (int i = 0; i < keyData.length; i++) {
+ String hexStr = Integer.toString(keyData[i] & 0x00FF, 16);
+ if (hexStr.length() == 1) {
+ hexStr = "0" + hexStr;
+ }
+ sb.append(hexStr);
+ }
+ return sb.toString();
+ }
+
+ public String generateNewKeyHexString(int numBits, String algName, String keyName)
+ throws NoSuchAlgorithmException {
+ return toHexString(generateNewKey(numBits, algName, keyName));
+ }
+
public byte[] generateNewKey(int numBits, String algName, String keyName)
throws NoSuchAlgorithmException {
@@ -78,10 +101,14 @@ public class SystemKeyStore {
private File getKeyFile(String keyName) {
File sysKeystoreDir = new File(Environment.getDataDirectory(),
SYSTEM_KEYSTORE_DIRECTORY);
- File keyFile = new File(sysKeystoreDir, keyName);
+ File keyFile = new File(sysKeystoreDir, keyName + KEY_FILE_EXTENSION);
return keyFile;
}
+ public String retrieveKeyHexString(String keyName) {
+ return toHexString(retrieveKey(keyName));
+ }
+
public byte[] retrieveKey(String keyName) {
File keyFile = getKeyFile(keyName);
diff --git a/keystore/tests/src/android/security/SystemKeyStoreTest.java b/keystore/tests/src/android/security/SystemKeyStoreTest.java
index a85f889..bbeceeb 100644
--- a/keystore/tests/src/android/security/SystemKeyStoreTest.java
+++ b/keystore/tests/src/android/security/SystemKeyStoreTest.java
@@ -32,6 +32,7 @@ import android.test.suitebuilder.annotation.MediumTest;
public class SystemKeyStoreTest extends ActivityUnitTestCase<Activity> {
private static final String keyName = "TestKey";
+ private static final String keyName2 = "TestKey2";
private SystemKeyStore mSysKeyStore = null;
public SystemKeyStoreTest() {
@@ -43,6 +44,7 @@ public class SystemKeyStoreTest extends ActivityUnitTestCase<Activity> {
mSysKeyStore = SystemKeyStore.getInstance();
try {
mSysKeyStore.deleteKey(keyName);
+ mSysKeyStore.deleteKey(keyName2);
} catch (Exception e) { }
super.setUp();
}
@@ -51,6 +53,7 @@ public class SystemKeyStoreTest extends ActivityUnitTestCase<Activity> {
protected void tearDown() throws Exception {
try {
mSysKeyStore.deleteKey(keyName);
+ mSysKeyStore.deleteKey(keyName2);
} catch (Exception e) { }
super.tearDown();
}
@@ -67,6 +70,14 @@ public class SystemKeyStoreTest extends ActivityUnitTestCase<Activity> {
mSysKeyStore.deleteKey(keyName);
byte[] nullKey = mSysKeyStore.retrieveKey(keyName);
assertNull(nullKey);
+
+ String newKeyStr = mSysKeyStore.generateNewKeyHexString(128, "AES", keyName2);
+ assertNotNull(newKeyStr);
+ String recKeyStr = mSysKeyStore.retrieveKeyHexString(keyName2);
+ assertEquals(newKeyStr, recKeyStr);
+ mSysKeyStore.deleteKey(keyName2);
+ String nullKey2 = mSysKeyStore.retrieveKeyHexString(keyName);
+ assertNull(nullKey2);
} catch (Exception e) {
fail();
}