14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric;
24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import java.security.AlgorithmParameters;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import java.security.InvalidAlgorithmParameterException;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.SecureRandom;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import java.security.spec.AlgorithmParameterSpec;
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.InvalidKeySpecException;
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.KeySpec;
134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.SecretKey;
154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.spec.DESedeKeySpec;
164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import javax.crypto.spec.IvParameterSpec;
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.spec.SecretKeySpec;
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.KeyGenerationParameters;
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.engines.DESedeEngine;
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.engines.DESedeWrapEngine;
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.generators.DESedeKeyGenerator;
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.macs.CBCBlockCipherMac;
304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.crypto.macs.CMac;
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.modes.CBCBlockCipher;
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.paddings.ISO7816d4Padding;
364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator;
394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseSecretKeyFactory;
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher;
454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jce.provider.BouncyCastleProvider;
474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic final class DESede
494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{
504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private DESede()
514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class ECB
554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public ECB()
584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new DESedeEngine());
604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class CBC
644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public CBC()
674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipher(new DESedeEngine()), 64);
694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // /**
744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //  * DESede   CFB8
754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //  */
764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class DESedeCFB8
774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseMac
784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public DESedeCFB8()
804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(new CFBBlockCipherMac(new DESedeEngine()));
824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    /**
874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * DESede64
884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     */
894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class DESede64
904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseMac
914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public DESede64()
934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipherMac(new DESedeEngine(), 64));
954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    /**
994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * DESede64with7816-4Padding
1004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     */
1014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class DESede64with7816d4
1024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseMac
1034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
1044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public DESede64with7816d4()
1054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipherMac(new DESedeEngine(), 64, new ISO7816d4Padding()));
1074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class CBCMAC
1114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseMac
1124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
1134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public CBCMAC()
1144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipherMac(new DESedeEngine()));
1164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
1204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // static public class CMAC
1214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseMac
1224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
1234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public CMAC()
1244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
1254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(new CMac(new DESedeEngine()));
1264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
1274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
1284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
1294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class Wrap
1314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseWrapCipher
1324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
1334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Wrap()
1344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new DESedeWrapEngine());
1364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
1404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class RFC3211
1414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseWrapCipher
1424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
1434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public RFC3211()
1444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
1454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(new RFC3211WrapEngine(new DESedeEngine()), 8);
1464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
1474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
1484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
1494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom  /**
1514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * DESede - the default for this is to generate a key in
1524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * a-b-a format that's 24 bytes long but has 16 bytes of
1534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * key material (the first 8 bytes is repeated as the last
1544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * 8 bytes). If you give it a size, you'll get just what you
1554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * asked for.
1564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     */
1574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class KeyGenerator
1584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseKeyGenerator
1594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
1604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private boolean     keySizeSet = false;
1614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyGenerator()
1634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super("DESede", 192, new DESedeKeyGenerator());
1654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        protected void engineInit(
1684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            int             keySize,
1694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            SecureRandom random)
1704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super.engineInit(keySize, random);
1724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            keySizeSet = true;
1734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        protected SecretKey engineGenerateKey()
1764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (uninitialised)
1784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
1794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                engine.init(new KeyGenerationParameters(new SecureRandom(), defaultKeySize));
1804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                uninitialised = false;
1814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
1824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            //
1844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // if no key size has been defined generate a 24 byte key in
1854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // the a-b-a format
1864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            //
1874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (!keySizeSet)
1884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
1894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                byte[]     k = engine.generateKey();
1904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                System.arraycopy(k, 0, k, 16, 8);
1924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                return new SecretKeySpec(k, algName);
1944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
1954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            else
1964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
1974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                return new SecretKeySpec(engine.generateKey(), algName);
1984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
1994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
2004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
2014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
2024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    /**
2034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * generate a desEDE key in the a-b-c format.
2044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     */
2054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class KeyGenerator3
2064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseKeyGenerator
2074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
2084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyGenerator3()
2094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
2104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super("DESede3", 192, new DESedeKeyGenerator());
2114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
2124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
2134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
2144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    /**
2154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * PBEWithSHAAnd3-KeyTripleDES-CBC
2164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     */
2174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class PBEWithSHAAndDES3Key
2184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
2194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
2204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public PBEWithSHAAndDES3Key()
2214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
2224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipher(new DESedeEngine()));
2234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
2244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
2254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
2264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    /**
2274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     * PBEWithSHAAnd2-KeyTripleDES-CBC
2284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom     */
2294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class PBEWithSHAAndDES2Key
2304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
2314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
2324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public PBEWithSHAAndDES2Key()
2334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
2344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipher(new DESedeEngine()));
2354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
2364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
2374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
238a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
239a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAnd3-KeyTripleDES-CBC
240a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
241a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAndDES3KeyFactory
242a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends DES.DESPBEKeyFactory
243a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
244a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAndDES3KeyFactory()
245a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
246a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEwithSHAandDES3Key-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC, true, PKCS12, SHA1, 192, 64);
247a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
248a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
249a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
250a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
251a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAnd2-KeyTripleDES-CBC
252a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
253a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAndDES2KeyFactory
254a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends DES.DESPBEKeyFactory
255a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
256a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAndDES2KeyFactory()
257a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
258a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEwithSHAandDES2Key-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC, true, PKCS12, SHA1, 128, 64);
259a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
260a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
261a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
2624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
2634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class AlgParamGen
2644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseAlgorithmParameterGenerator
2654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
2664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     protected void engineInit(
2674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         AlgorithmParameterSpec genParamSpec,
2684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         SecureRandom            random)
2694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         throws InvalidAlgorithmParameterException
2704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
2714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
2724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
2734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     protected AlgorithmParameters engineGenerateParameters()
2754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
2764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         byte[]  iv = new byte[8];
2774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         if (random == null)
2794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         {
2804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             random = new SecureRandom();
2814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         }
2824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         random.nextBytes(iv);
2844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         AlgorithmParameters params;
2864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         try
2884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         {
2894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
2904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             params.init(new IvParameterSpec(iv));
2914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         }
2924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         catch (Exception e)
2934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         {
2944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             throw new RuntimeException(e.getMessage());
2954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         }
2964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         return params;
2984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
2994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
3004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
3014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class KeyFactory
3034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseSecretKeyFactory
3044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
3054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyFactory()
3064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
3074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super("DESede", null);
3084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
3094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        protected KeySpec engineGetKeySpec(
3114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            SecretKey key,
3124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            Class keySpec)
3134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        throws InvalidKeySpecException
3144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
3154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (keySpec == null)
3164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
3174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                throw new InvalidKeySpecException("keySpec parameter is null");
3184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
3194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (key == null)
3204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
3214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                throw new InvalidKeySpecException("key parameter is null");
3224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
3234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (SecretKeySpec.class.isAssignableFrom(keySpec))
3254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
3264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                return new SecretKeySpec(key.getEncoded(), algName);
3274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
3284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            else if (DESedeKeySpec.class.isAssignableFrom(keySpec))
3294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
3304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                byte[]  bytes = key.getEncoded();
3314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                try
3334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                {
3344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    if (bytes.length == 16)
3354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    {
3364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                        byte[]  longKey = new byte[24];
3374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                        System.arraycopy(bytes, 0, longKey, 0, 16);
3394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                        System.arraycopy(bytes, 0, longKey, 16, 8);
3404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                        return new DESedeKeySpec(longKey);
3424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    }
3434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    else
3444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    {
3454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                        return new DESedeKeySpec(bytes);
3464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    }
3474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                }
3484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                catch (Exception e)
3494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                {
3504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                    throw new InvalidKeySpecException(e.toString());
3514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                }
3524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
3534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            throw new InvalidKeySpecException("Invalid KeySpec");
3554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
3564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        protected SecretKey engineGenerateSecret(
3584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            KeySpec keySpec)
3594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        throws InvalidKeySpecException
3604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
3614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (keySpec instanceof DESedeKeySpec)
3624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
3634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                DESedeKeySpec desKeySpec = (DESedeKeySpec)keySpec;
3644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                return new SecretKeySpec(desKeySpec.getKey(), "DESede");
3654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
3664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return super.engineGenerateSecret(keySpec);
3684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
3694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
3704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class Mappings
3724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends AlgorithmProvider
3734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
3744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String PREFIX = DESede.class.getName();
3754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String PACKAGE = "org.bouncycastle.jcajce.provider.symmetric"; // JDK 1.2
3764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Mappings()
3784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
3794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
3804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public void configure(ConfigurableProvider provider)
3824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
3834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Cipher.DESEDE", PREFIX + "$ECB");
3844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
3854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC");
3864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
3874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Cipher.DESEDEWRAP", PREFIX + "$Wrap");
3884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-changed
3894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWRAP");
3904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-changed
3914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
3924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211");
3934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
3944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
395a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.TDEA", "DESEDE");
396a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.TDEAWRAP", "DESEDEWRAP");
397a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.KeyGenerator.TDEA", "DESEDE");
398a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.TDEA", "DESEDE");
399a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // BEGIN android-removed
400a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator.TDEA", "DESEDE");
401a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // END android-removed
402a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.TDEA", "DESEDE");
403a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
4044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (provider.hasAlgorithm("MessageDigest", "SHA-1"))
4054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
4064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES3Key");
4074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // BEGIN android-removed
4084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key");
4094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key");
4104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // END android-removed
4114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES2Key");
4124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // BEGIN android-removed
4134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key");
4144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                // END android-removed
4154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC, "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
4164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC, "PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
4174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1ANDDESEDE", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
4184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND3-KEYTRIPLEDES-CBC", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
4194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND2-KEYTRIPLEDES-CBC", "PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
4204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
4214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("KeyGenerator.DESEDE", PREFIX + "$KeyGenerator");
4234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
4244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3");
4254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator");
4264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
4274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.DESEDE", PREFIX + "$KeyFactory");
4294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
4314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC");
4324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC");
4334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
4344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            //
4354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8");
4364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
4374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            //
4384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64");
4394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
4404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            //
4414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4");
4424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
4434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
4444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
4454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
4464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("AlgorithmParameters.DESEDE", PACKAGE + ".util.IvAlgorithmParameters");
4484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
4494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
4514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE",  PREFIX + "$AlgParamGen");
4524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
4534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
454a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
455a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES3KeyFactory");
456a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES2KeyFactory");
457a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
458a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES", "PKCS12PBE");
459a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES", "PKCS12PBE");
460a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PKCS12PBE");
461a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PKCS12PBE");
462a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES3KEY-CBC", "PKCS12PBE");
463a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES2KEY-CBC", "PKCS12PBE");
464a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
465a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.3", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
466a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.4", "PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
467a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWithSHAAnd3KeyTripleDES", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
468a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.3", "PKCS12PBE");
469a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.4", "PKCS12PBE");
470a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWithSHAAnd3KeyTripleDES",  "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
4714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
4724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
4734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom}
474