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

Commit 50228a64 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents ea31cbea b6315032
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -38727,7 +38727,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