Loading keystore/java/android/security/SystemKeyStore.java +28 −1 Original line number Diff line number Diff line Loading @@ -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() { } Loading @@ -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 { Loading Loading @@ -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); Loading keystore/tests/src/android/security/SystemKeyStoreTest.java +11 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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(); } Loading @@ -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(); } Loading @@ -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(); } Loading Loading
keystore/java/android/security/SystemKeyStore.java +28 −1 Original line number Diff line number Diff line Loading @@ -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() { } Loading @@ -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 { Loading Loading @@ -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); Loading
keystore/tests/src/android/security/SystemKeyStoreTest.java +11 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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(); } Loading @@ -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(); } Loading @@ -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(); } Loading