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

Commit 1a274302 authored by Frank Salim's avatar Frank Salim Committed by android-build-merger
Browse files

Merge "Revise secure key import API after review" into pi-dev

am: 50228a64

Change-Id: I4fe07806b781d337f2df40f34fb75662187f4360
parents 8700c434 50228a64
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -38729,7 +38729,18 @@ package android.security.keystore {
    method public android.security.keystore.KeyProtection.Builder setUserConfirmationRequired(boolean);
  }
  public class SecureKeyImportUnavailableException extends java.security.ProviderException {
    ctor public SecureKeyImportUnavailableException();
    ctor public SecureKeyImportUnavailableException(java.lang.String);
    ctor public SecureKeyImportUnavailableException(java.lang.String, java.lang.Throwable);
    ctor public SecureKeyImportUnavailableException(java.lang.Throwable);
  }
  public class StrongBoxUnavailableException extends java.security.ProviderException {
    ctor public StrongBoxUnavailableException();
    ctor public StrongBoxUnavailableException(java.lang.String);
    ctor public StrongBoxUnavailableException(java.lang.String, java.lang.Throwable);
    ctor public StrongBoxUnavailableException(java.lang.Throwable);
  }
  public class UserNotAuthenticatedException extends java.security.InvalidKeyException {
+6 −4
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ class AndroidKeyStoreBCWorkaroundProvider extends Provider {
        putSymmetricCipherImpl("AES/CTR/NoPadding",
                PACKAGE_NAME + ".AndroidKeyStoreUnauthenticatedAESCipherSpi$CTR$NoPadding");

        if ("true".equals(System.getProperty("supports3DES"))) {
            putSymmetricCipherImpl("DESede/CBC/NoPadding",
                PACKAGE_NAME + ".AndroidKeyStore3DESCipherSpi$CBC$NoPadding");
            putSymmetricCipherImpl("DESede/CBC/PKCS7Padding",
@@ -102,6 +103,7 @@ class AndroidKeyStoreBCWorkaroundProvider extends Provider {
                PACKAGE_NAME + ".AndroidKeyStore3DESCipherSpi$ECB$NoPadding");
            putSymmetricCipherImpl("DESede/ECB/PKCS7Padding",
                PACKAGE_NAME + ".AndroidKeyStore3DESCipherSpi$ECB$PKCS7Padding");
        }

        putSymmetricCipherImpl("AES/GCM/NoPadding",
                PACKAGE_NAME + ".AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding");
+6 −0
Original line number Diff line number Diff line
@@ -475,6 +475,12 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato

            success = true;
            return keyPair;
        } catch (ProviderException e) {
          if ((mSpec.getPurposes() & KeyProperties.PURPOSE_WRAP_KEY) != 0) {
              throw new SecureKeyImportUnavailableException(e);
          } else {
              throw e;
          }
        } finally {
            if (!success) {
                Credentials.deleteAllTypesForAlias(mKeyStore, mEntryAlias, mEntryUid);
+9 −2
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ public class AndroidKeyStoreProvider extends Provider {
    public AndroidKeyStoreProvider() {
        super(PROVIDER_NAME, 1.0, "Android KeyStore security provider");

        boolean supports3DES = "true".equals(System.getProperty("supports3DES"));

        // java.security.KeyStore
        put("KeyStore.AndroidKeyStore", PACKAGE_NAME + ".AndroidKeyStoreSpi");

@@ -80,16 +82,21 @@ public class AndroidKeyStoreProvider extends Provider {

        // javax.crypto.KeyGenerator
        put("KeyGenerator.AES", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$AES");
        put("KeyGenerator.DESede", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$DESede");
        put("KeyGenerator.HmacSHA1", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$HmacSHA1");
        put("KeyGenerator.HmacSHA224", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$HmacSHA224");
        put("KeyGenerator.HmacSHA256", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$HmacSHA256");
        put("KeyGenerator.HmacSHA384", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$HmacSHA384");
        put("KeyGenerator.HmacSHA512", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$HmacSHA512");

        if (supports3DES) {
            put("KeyGenerator.DESede", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$DESede");
        }

        // java.security.SecretKeyFactory
        putSecretKeyFactoryImpl("AES");
        if (supports3DES) {
            putSecretKeyFactoryImpl("DESede");
        }
        putSecretKeyFactoryImpl("HmacSHA1");
        putSecretKeyFactoryImpl("HmacSHA224");
        putSecretKeyFactoryImpl("HmacSHA256");
+4 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.security.keymaster.KeymasterArguments;
import android.security.keymaster.KeymasterDefs;
import android.security.keystore.KeyProperties;
import android.security.keystore.KeyProtection;
import android.security.keystore.SecureKeyImportUnavailableException;
import android.security.keystore.WrappedKeyEntry;
import android.util.Log;

@@ -755,7 +756,9 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
            0, // FIXME fingerprint id?
            mUid,
            new KeyCharacteristics());
        if (errorCode != KeyStore.NO_ERROR) {
        if (errorCode == KeymasterDefs.KM_ERROR_UNIMPLEMENTED) {
          throw new SecureKeyImportUnavailableException("Could not import wrapped key");
        } else if (errorCode != KeyStore.NO_ERROR) {
            throw new KeyStoreException("Failed to import wrapped key. Keystore error code: "
                + errorCode);
        }
Loading