Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 851b2e75 authored by Oscar Montemayor's avatar Oscar Montemayor Committed by Android (Google) Code Review
Browse files

Merge "Apps on SD card. Added support for retrieving and generating keys as Hex Strings."

parents f5dba888 b62e8132
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -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);
+11 −0
Original line number Diff line number Diff line
@@ -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();
        }