Apps on SD card.
Added support for retrieving and generating keys as Hex Strings.
diff --git a/keystore/java/android/security/SystemKeyStore.java b/keystore/java/android/security/SystemKeyStore.java
index 452125a4..61a4293 100644
--- a/keystore/java/android/security/SystemKeyStore.java
+++ b/keystore/java/android/security/SystemKeyStore.java
@@ -35,6 +35,7 @@
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 @@
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 @@
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..bbeceeb7 100644
--- a/keystore/tests/src/android/security/SystemKeyStoreTest.java
+++ b/keystore/tests/src/android/security/SystemKeyStoreTest.java
@@ -32,6 +32,7 @@
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 @@
mSysKeyStore = SystemKeyStore.getInstance();
try {
mSysKeyStore.deleteKey(keyName);
+ mSysKeyStore.deleteKey(keyName2);
} catch (Exception e) { }
super.setUp();
}
@@ -51,6 +53,7 @@
protected void tearDown() throws Exception {
try {
mSysKeyStore.deleteKey(keyName);
+ mSysKeyStore.deleteKey(keyName2);
} catch (Exception e) { }
super.tearDown();
}
@@ -67,6 +70,14 @@
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();
}