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

Commit 92c9692e authored by Alex Klyubin's avatar Alex Klyubin Committed by Android Git Automerger
Browse files

am d684ebd3: am 0bd10c21: am 5960c3d5: Merge "Add unauthenticated AES ciphers...

am d684ebd3: am 0bd10c21: am 5960c3d5: Merge "Add unauthenticated AES ciphers backed by AndroidKeyStore."

* commit 'd684ebd3':
  Add unauthenticated AES ciphers backed by AndroidKeyStore.
parents 34702d2e d684ebd3
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -457,7 +457,7 @@ public class AndroidKeyStore extends KeyStoreSpi {

        String keyAlgorithmString = key.getAlgorithm();
        @KeyStoreKeyConstraints.AlgorithmEnum int keyAlgorithm;
        @KeyStoreKeyConstraints.AlgorithmEnum Integer digest;
        @KeyStoreKeyConstraints.DigestEnum Integer digest;
        try {
            keyAlgorithm =
                    KeyStoreKeyConstraints.Algorithm.fromJCASecretKeyAlgorithm(keyAlgorithmString);
@@ -493,12 +493,6 @@ public class AndroidKeyStore extends KeyStoreSpi {
        if (digest != null) {
            args.addInt(KeymasterDefs.KM_TAG_DIGEST,
                    KeyStoreKeyConstraints.Digest.toKeymaster(digest));
        }
        if (keyAlgorithm == KeyStoreKeyConstraints.Algorithm.HMAC) {
            if (digest == null) {
                throw new IllegalStateException("Digest algorithm must be specified for key"
                        + " algorithm " + keyAlgorithmString);
            }
            Integer digestOutputSizeBytes =
                    KeyStoreKeyConstraints.Digest.getOutputSizeBytes(digest);
            if (digestOutputSizeBytes != null) {
@@ -507,6 +501,12 @@ public class AndroidKeyStore extends KeyStoreSpi {
                args.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, digestOutputSizeBytes);
            }
        }
        if (keyAlgorithm == KeyStoreKeyConstraints.Algorithm.HMAC) {
            if (digest == null) {
                throw new IllegalStateException("Digest algorithm must be specified for key"
                        + " algorithm " + keyAlgorithmString);
            }
        }

        @KeyStoreKeyConstraints.PurposeEnum int purposes = (params.getPurposes() != null)
                ? params.getPurposes()
@@ -560,6 +560,12 @@ public class AndroidKeyStore extends KeyStoreSpi {
        // TODO: Remove this once keymaster does not require us to specify the size of imported key.
        args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, keyMaterial.length * 8);

        if (((purposes & KeyStoreKeyConstraints.Purpose.ENCRYPT) != 0)
                || ((purposes & KeyStoreKeyConstraints.Purpose.DECRYPT) != 0)) {
            // Permit caller-specified IV. This is needed for the Cipher abstraction.
            args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
        }

        Credentials.deleteAllTypesForAlias(mKeyStore, entryAlias);
        String keyAliasInKeystore = Credentials.USER_SECRET_KEY + entryAlias;
        int errorCode = mKeyStore.importKey(
+25 −2
Original line number Diff line number Diff line
@@ -41,7 +41,30 @@ public class AndroidKeyStoreProvider extends Provider {
        put("KeyGenerator.HmacSHA256", KeyStoreKeyGeneratorSpi.HmacSHA256.class.getName());

        // javax.crypto.Mac
        put("Mac.HmacSHA256", KeyStoreHmacSpi.HmacSHA256.class.getName());
        put("Mac.HmacSHA256 SupportedKeyClasses", KeyStoreSecretKey.class.getName());
        putMacImpl("HmacSHA256", KeyStoreHmacSpi.HmacSHA256.class.getName());

        // javax.crypto.Cipher
        putSymmetricCipherImpl("AES/ECB/NoPadding",
                KeyStoreCipherSpi.AES.ECB.NoPadding.class.getName());
        putSymmetricCipherImpl("AES/ECB/PKCS7Padding",
                KeyStoreCipherSpi.AES.ECB.PKCS7Padding.class.getName());

        putSymmetricCipherImpl("AES/CBC/NoPadding",
                KeyStoreCipherSpi.AES.CBC.NoPadding.class.getName());
        putSymmetricCipherImpl("AES/CBC/PKCS7Padding",
                KeyStoreCipherSpi.AES.CBC.PKCS7Padding.class.getName());

        putSymmetricCipherImpl("AES/CTR/NoPadding",
                KeyStoreCipherSpi.AES.CTR.NoPadding.class.getName());
    }

    private void putMacImpl(String algorithm, String implClass) {
        put("Mac." + algorithm, implClass);
        put("Mac." + algorithm + " SupportedKeyClasses", KeyStoreSecretKey.class.getName());
    }

    private void putSymmetricCipherImpl(String transformation, String implClass) {
        put("Cipher." + transformation, implClass);
        put("Cipher." + transformation + " SupportedKeyClasses", KeyStoreSecretKey.class.getName());
    }
}
+540 −0

File added.

Preview size limit exceeded, changes collapsed.

+121 −56

File changed.

Preview size limit exceeded, changes collapsed.

+2 −25

File changed.

Preview size limit exceeded, changes collapsed.

Loading