Loading api/current.txt +11 −0 Original line number Diff line number Diff line Loading @@ -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 { keystore/java/android/security/keystore/AndroidKeyStoreBCWorkaroundProvider.java +6 −4 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -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"); Loading keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java +6 −0 Original line number Diff line number Diff line Loading @@ -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); Loading keystore/java/android/security/keystore/AndroidKeyStoreProvider.java +9 −2 Original line number Diff line number Diff line Loading @@ -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"); Loading @@ -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"); Loading keystore/java/android/security/keystore/AndroidKeyStoreSpi.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
api/current.txt +11 −0 Original line number Diff line number Diff line Loading @@ -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 {
keystore/java/android/security/keystore/AndroidKeyStoreBCWorkaroundProvider.java +6 −4 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -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"); Loading
keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java +6 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
keystore/java/android/security/keystore/AndroidKeyStoreProvider.java +9 −2 Original line number Diff line number Diff line Loading @@ -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"); Loading @@ -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"); Loading
keystore/java/android/security/keystore/AndroidKeyStoreSpi.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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