Merge "Load fewer classes when AndroidKeyStore provider is installed."

This commit is contained in:
Alex Klyubin
2015-04-03 19:47:17 +00:00
committed by Gerrit Code Review
2 changed files with 23 additions and 17 deletions

View File

@@ -29,50 +29,58 @@ import javax.crypto.Mac;
public class AndroidKeyStoreProvider extends Provider { public class AndroidKeyStoreProvider extends Provider {
public static final String PROVIDER_NAME = "AndroidKeyStore"; public static final String PROVIDER_NAME = "AndroidKeyStore";
// IMPLEMENTATION NOTE: Class names are hard-coded in this provider to avoid loading these
// classes when this provider is instantiated and installed early on during each app's
// initialization process.
private static final String PACKAGE_NAME = "android.security";
private static final String KEYSTORE_SECRET_KEY_CLASS_NAME =
PACKAGE_NAME + ".KeyStoreSecretKey";
public AndroidKeyStoreProvider() { public AndroidKeyStoreProvider() {
super(PROVIDER_NAME, 1.0, "Android KeyStore security provider"); super(PROVIDER_NAME, 1.0, "Android KeyStore security provider");
// java.security.KeyStore // java.security.KeyStore
put("KeyStore." + AndroidKeyStore.NAME, AndroidKeyStore.class.getName()); put("KeyStore.AndroidKeyStore", PACKAGE_NAME + ".AndroidKeyStore");
// java.security.KeyPairGenerator // java.security.KeyPairGenerator
put("KeyPairGenerator.EC", AndroidKeyPairGenerator.EC.class.getName()); put("KeyPairGenerator.EC", PACKAGE_NAME + ".AndroidKeyPairGenerator$EC");
put("KeyPairGenerator.RSA", AndroidKeyPairGenerator.RSA.class.getName()); put("KeyPairGenerator.RSA", PACKAGE_NAME + ".AndroidKeyPairGenerator$RSA");
// javax.crypto.KeyGenerator // javax.crypto.KeyGenerator
put("KeyGenerator.AES", KeyStoreKeyGeneratorSpi.AES.class.getName()); put("KeyGenerator.AES", PACKAGE_NAME + ".KeyStoreKeyGeneratorSpi$AES");
put("KeyGenerator.HmacSHA256", KeyStoreKeyGeneratorSpi.HmacSHA256.class.getName()); put("KeyGenerator.HmacSHA256", PACKAGE_NAME + ".KeyStoreKeyGeneratorSpi$HmacSHA256");
// java.security.SecretKeyFactory // java.security.SecretKeyFactory
put("SecretKeyFactory.AES", KeyStoreSecretKeyFactorySpi.class.getName()); put("SecretKeyFactory.AES", PACKAGE_NAME + ".KeyStoreSecretKeyFactorySpi");
put("SecretKeyFactory.HmacSHA256", KeyStoreSecretKeyFactorySpi.class.getName()); put("SecretKeyFactory.HmacSHA256", PACKAGE_NAME + ".KeyStoreSecretKeyFactorySpi");
// javax.crypto.Mac // javax.crypto.Mac
putMacImpl("HmacSHA256", KeyStoreHmacSpi.HmacSHA256.class.getName()); putMacImpl("HmacSHA256", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA256");
// javax.crypto.Cipher // javax.crypto.Cipher
putSymmetricCipherImpl("AES/ECB/NoPadding", putSymmetricCipherImpl("AES/ECB/NoPadding",
KeyStoreCipherSpi.AES.ECB.NoPadding.class.getName()); PACKAGE_NAME + ".KeyStoreCipherSpi$AES$ECB$NoPadding");
putSymmetricCipherImpl("AES/ECB/PKCS7Padding", putSymmetricCipherImpl("AES/ECB/PKCS7Padding",
KeyStoreCipherSpi.AES.ECB.PKCS7Padding.class.getName()); PACKAGE_NAME + ".KeyStoreCipherSpi$AES$ECB$PKCS7Padding");
putSymmetricCipherImpl("AES/CBC/NoPadding", putSymmetricCipherImpl("AES/CBC/NoPadding",
KeyStoreCipherSpi.AES.CBC.NoPadding.class.getName()); PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CBC$NoPadding");
putSymmetricCipherImpl("AES/CBC/PKCS7Padding", putSymmetricCipherImpl("AES/CBC/PKCS7Padding",
KeyStoreCipherSpi.AES.CBC.PKCS7Padding.class.getName()); PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CBC$PKCS7Padding");
putSymmetricCipherImpl("AES/CTR/NoPadding", putSymmetricCipherImpl("AES/CTR/NoPadding",
KeyStoreCipherSpi.AES.CTR.NoPadding.class.getName()); PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CTR$NoPadding");
} }
private void putMacImpl(String algorithm, String implClass) { private void putMacImpl(String algorithm, String implClass) {
put("Mac." + algorithm, implClass); put("Mac." + algorithm, implClass);
put("Mac." + algorithm + " SupportedKeyClasses", KeyStoreSecretKey.class.getName()); put("Mac." + algorithm + " SupportedKeyClasses", KEYSTORE_SECRET_KEY_CLASS_NAME);
} }
private void putSymmetricCipherImpl(String transformation, String implClass) { private void putSymmetricCipherImpl(String transformation, String implClass) {
put("Cipher." + transformation, implClass); put("Cipher." + transformation, implClass);
put("Cipher." + transformation + " SupportedKeyClasses", KeyStoreSecretKey.class.getName()); put("Cipher." + transformation + " SupportedKeyClasses", KEYSTORE_SECRET_KEY_CLASS_NAME);
} }
/** /**

View File

@@ -1146,8 +1146,6 @@ android.provider.Settings$SettingNotFoundException
android.provider.Settings$System android.provider.Settings$System
android.provider.Telephony$Mms android.provider.Telephony$Mms
android.renderscript.RenderScript android.renderscript.RenderScript
android.security.AndroidKeyPairGenerator
android.security.AndroidKeyStore
android.security.AndroidKeyStoreProvider android.security.AndroidKeyStoreProvider
android.speech.tts.TextToSpeechService android.speech.tts.TextToSpeechService
android.speech.tts.TextToSpeechService$SpeechItemV1 android.speech.tts.TextToSpeechService$SpeechItemV1