diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java
index 1fdadc2..7e26156 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java
@@ -12,6 +12,12 @@
 import org.bouncycastle.crypto.CipherKeyGenerator;
 import org.bouncycastle.crypto.CipherParameters;
 import org.bouncycastle.crypto.digests.SHA1Digest;
+// BEGIN ANDROID-ADDED
+import org.bouncycastle.crypto.digests.SHA224Digest;
+import org.bouncycastle.crypto.digests.SHA256Digest;
+import org.bouncycastle.crypto.digests.SHA384Digest;
+import org.bouncycastle.crypto.digests.SHA512Digest;
+// END ANDROID-ADDED
 import org.bouncycastle.crypto.macs.HMac;
 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
 import org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey;
@@ -80,6 +86,44 @@
         }
     }
 
+    // BEGIN ANDROID-ADDED
+    public static class SHA224Mac
+            extends BaseMac
+    {
+        public SHA224Mac()
+        {
+            super(new HMac(new SHA224Digest()));
+        }
+    }
+
+    public static class SHA256Mac
+            extends BaseMac
+    {
+        public SHA256Mac()
+        {
+            super(new HMac(new SHA256Digest()));
+        }
+    }
+
+    public static class SHA384Mac
+            extends BaseMac
+    {
+        public SHA384Mac()
+        {
+            super(new HMac(new SHA384Digest()));
+        }
+    }
+
+    public static class SHA512Mac
+            extends BaseMac
+    {
+        public SHA512Mac()
+        {
+            super(new HMac(new SHA512Digest()));
+        }
+    }
+    // END ANDROID-ADDED
+
     /**
      * PBEWithHmacSHA
      */
@@ -92,17 +136,28 @@
         }
     }
 
-
-    public static class BasePBKDF2WithHmacSHA1
+    // BEGIN ANDROID-CHANGED
+    // Was: public static class BasePBKDF2WithHmacSHA1
+    private static class BasePBKDF2WithHmacSHA_Variant
+    // END ANDROID-CHANGED
         extends BaseSecretKeyFactory
     {
         private int scheme;
+        // BEGIN ANDROID-ADDED
+        private int digest;
+        // END ANDROID-ADDED
 
-        public BasePBKDF2WithHmacSHA1(String name, int scheme)
+        // BEGIN ANDROID-CHANGED
+        // Was: public static class BasePBKDF2WithHmacSHA1
+        private BasePBKDF2WithHmacSHA_Variant(String name, int scheme, int digest)
+        // END ANDROID-CHANGED
         {
             super(name, PKCSObjectIdentifiers.id_PBKDF2);
 
             this.scheme = scheme;
+            // BEGIN ANDROID-ADDED
+            this.digest = digest;
+            // BEGIN ANDROID-ADDED
         }
 
         protected SecretKey engineGenerateSecret(
@@ -135,7 +190,9 @@
                     throw new IllegalArgumentException("password empty");
                 }
 
-                int digest = SHA1;
+                // BEGIN android-removed
+                // int digest = SHA1;
+                // END android-removed
                 int keySize = pbeSpec.getKeyLength();
                 int ivSize = -1;    // JDK 1,2 and earlier does not understand simplified version.
                 CipherParameters param = PBE.Util.makePBEMacParameters(pbeSpec, scheme, digest, keySize);
@@ -147,6 +204,15 @@
         }
     }
 
+    // BEGIN android-added
+    public static class BasePBKDF2WithHmacSHA1 extends BasePBKDF2WithHmacSHA_Variant {
+        public BasePBKDF2WithHmacSHA1(String name, int scheme)
+        {
+            super(name, scheme, SHA1);
+        }
+    }
+    // END android-added
+
     public static class PBKDF2WithHmacSHA1UTF8
         extends BasePBKDF2WithHmacSHA1
     {
@@ -165,6 +231,74 @@
         }
     }
 
+    // BEGIN ANDROID-ADDED
+    public static class BasePBKDF2WithHmacSHA224 extends BasePBKDF2WithHmacSHA_Variant {
+        public BasePBKDF2WithHmacSHA224(String name, int scheme)
+        {
+            super(name, scheme, SHA224);
+        }
+    }
+
+    public static class PBKDF2WithHmacSHA224UTF8
+            extends BasePBKDF2WithHmacSHA224
+    {
+        public PBKDF2WithHmacSHA224UTF8()
+        {
+            super("PBKDF2WithHmacSHA224", PKCS5S2_UTF8);
+        }
+    }
+
+    public static class BasePBKDF2WithHmacSHA256 extends BasePBKDF2WithHmacSHA_Variant {
+        public BasePBKDF2WithHmacSHA256(String name, int scheme)
+        {
+            super(name, scheme, SHA256);
+        }
+    }
+
+    public static class PBKDF2WithHmacSHA256UTF8
+            extends BasePBKDF2WithHmacSHA256
+    {
+        public PBKDF2WithHmacSHA256UTF8()
+        {
+            super("PBKDF2WithHmacSHA256", PKCS5S2_UTF8);
+        }
+    }
+
+
+    public static class BasePBKDF2WithHmacSHA384 extends BasePBKDF2WithHmacSHA_Variant {
+        public BasePBKDF2WithHmacSHA384(String name, int scheme)
+        {
+            super(name, scheme, SHA384);
+        }
+    }
+
+    public static class PBKDF2WithHmacSHA384UTF8
+            extends BasePBKDF2WithHmacSHA384
+    {
+        public PBKDF2WithHmacSHA384UTF8()
+        {
+            super("PBKDF2WithHmacSHA384", PKCS5S2_UTF8);
+        }
+    }
+
+    public static class BasePBKDF2WithHmacSHA512 extends BasePBKDF2WithHmacSHA_Variant {
+        public BasePBKDF2WithHmacSHA512(String name, int scheme)
+        {
+            super(name, scheme, SHA512);
+        }
+    }
+
+    public static class PBKDF2WithHmacSHA512UTF8
+            extends BasePBKDF2WithHmacSHA512
+    {
+        public PBKDF2WithHmacSHA512UTF8()
+        {
+            super("PBKDF2WithHmacSHA512", PKCS5S2_UTF8);
+        }
+    }
+    // END ANDROID-ADDED
+
+
     public static class Mappings
         extends DigestAlgorithmProvider
     {
@@ -187,12 +321,24 @@
 
             provider.addAlgorithm("Mac.PBEWITHHMACSHA", PREFIX + "$SHA1Mac");
             provider.addAlgorithm("Mac.PBEWITHHMACSHA1", PREFIX + "$SHA1Mac");
+            // BEGIN android-added
+            provider.addAlgorithm("Mac.PBEWITHHMACSHA224", PREFIX + "$SHA224Mac");
+            provider.addAlgorithm("Mac.PBEWITHHMACSHA256", PREFIX + "$SHA256Mac");
+            provider.addAlgorithm("Mac.PBEWITHHMACSHA384", PREFIX + "$SHA384Mac");
+            provider.addAlgorithm("Mac.PBEWITHHMACSHA512", PREFIX + "$SHA512Mac");
+            // END android-added
             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHHMACSHA", "PBEWITHHMACSHA1");
             provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + OIWObjectIdentifiers.idSHA1, "PBEWITHHMACSHA1");
             provider.addAlgorithm("Alg.Alias.Mac." + OIWObjectIdentifiers.idSHA1, "PBEWITHHMACSHA");
 
             provider.addAlgorithm("SecretKeyFactory.PBEWITHHMACSHA1", PREFIX + "$PBEWithMacKeyFactory");
             provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA1", PREFIX + "$PBKDF2WithHmacSHA1UTF8");
+            // BEGIN android-added
+            provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA224", PREFIX + "$PBKDF2WithHmacSHA224UTF8");
+            provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA256", PREFIX + "$PBKDF2WithHmacSHA256UTF8");
+            provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA384", PREFIX + "$PBKDF2WithHmacSHA384UTF8");
+            provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA512", PREFIX + "$PBKDF2WithHmacSHA512UTF8");
+            // END android-added
             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBKDF2WithHmacSHA1AndUTF8", "PBKDF2WithHmacSHA1");
             provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA1And8BIT", PREFIX + "$PBKDF2WithHmacSHA18BIT");
             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBKDF2withASCII", "PBKDF2WithHmacSHA1And8BIT");
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java
index 8fead80..d81ad32 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java
@@ -52,6 +52,12 @@
     static final int        OPENSSL      = 3;
     static final int        PKCS5S1_UTF8 = 4;
     static final int        PKCS5S2_UTF8 = 5;
+    // BEGIN android-added
+    static final int        SHA224 = 6;
+    static final int        SHA384 = 7;
+    static final int        SHA512 = 8;
+    // END android-added
+
 
     /**
      * uses the appropriate mixer to generate the key and IV if necessary.
@@ -114,11 +120,24 @@
                 //     generator = new PKCS5S2ParametersGenerator(new TigerDigest());
                 //     break;
                 // END android-removed
+                // BEGIN android-added
+                case SHA224:
+                    generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getSHA224());
+                    break;
+                // END android-added
                 case SHA256:
                     // BEGIN android-changed
                     generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getSHA256());
                     // END android-changed
                     break;
+                // BEGIN android-added
+                case SHA384:
+                    generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getSHA384());
+                    break;
+                case SHA512:
+                    generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getSHA512());
+                    break;
+                // END android-added
                 // BEGIN android-removed
                 // case GOST3411:
                 //     generator = new PKCS5S2ParametersGenerator(new GOST3411Digest());
@@ -155,11 +174,24 @@
                 //     generator = new PKCS12ParametersGenerator(new TigerDigest());
                 //     break;
                 // END android-removed
+                // BEGIN android-added
+                case SHA224:
+                    generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA224());
+                    break;
+                // END android-added
                 case SHA256:
                     // BEGIN android-changed
                     generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA256());
                     // END android-changed
                     break;
+                // BEGIN android-added
+                case SHA384:
+                    generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA384());
+                    break;
+                case SHA512:
+                    generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA512());
+                    break;
+                // END android-added
                 // BEGIN android-removed
                 // case GOST3411:
                 //     generator = new PKCS12ParametersGenerator(new GOST3411Digest());
