14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric;
24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
35db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport java.io.IOException;
45db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport java.lang.reflect.Constructor;
55db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport java.lang.reflect.Method;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import java.security.AlgorithmParameters;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import java.security.InvalidAlgorithmParameterException;
94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.SecureRandom;
115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport java.security.spec.AlgorithmParameterSpec;
125db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport java.security.spec.InvalidParameterSpecException;
135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import javax.crypto.spec.IvParameterSpec;
164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
18a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.bc.BCObjectIdentifiers;
195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport org.bouncycastle.asn1.cms.GCMParameters;
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
21a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.BlockCipher;
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.BufferedBlockCipher;
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.CipherKeyGenerator;
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.engines.AESFastEngine;
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.engines.AESWrapEngine;
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// import org.bouncycastle.crypto.generators.Poly1305KeyGenerator;
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.crypto.macs.CMac;
30a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.macs.GMac;
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.modes.CBCBlockCipher;
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.modes.CFBBlockCipher;
34a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.modes.GCMBlockCipher;
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.modes.OFBBlockCipher;
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
405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters;
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher;
47a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider;
484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters;
49a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory;
504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// BEGIN android-removed
514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// import org.bouncycastle.jce.provider.BouncyCastleProvider;
524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// END android-removed
535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport org.bouncycastle.util.Integers;
544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic final class AES
564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{
575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    private static final Class gcmSpecClass = lookup("javax.crypto.spec.GCMParameterSpec");
585db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private AES()
604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class ECB
644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public ECB()
674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
68a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super(new BlockCipherProvider()
69a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            {
70a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom                public BlockCipher get()
71a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom                {
72a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom                    return new AESFastEngine();
73a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom                }
74a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            });
754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class CBC
794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom       extends BaseBlockCipher
804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public CBC()
824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipher(new AESFastEngine()), 128);
844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class CFB
884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public CFB()
914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 128)), 128);
934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class OFB
974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public OFB()
1004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new BufferedBlockCipher(new OFBBlockCipher(new AESFastEngine(), 128)), 128);
1024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    static public class GCM
1065db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        extends BaseBlockCipher
1075db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    {
1085db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        public GCM()
1095db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
1105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            super(new GCMBlockCipher(new AESFastEngine()));
1115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
1125db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    }
1135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
1144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
1154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class AESCMAC
1164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseMac
1174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
1184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public AESCMAC()
1194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
1204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(new CMac(new AESFastEngine()));
1214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
1224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
123a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //
124a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // public static class AESGMAC
125a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     extends BaseMac
126a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // {
127a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     public AESGMAC()
128a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     {
129a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         super(new GMac(new GCMBlockCipher(new AESFastEngine())));
130a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     }
131a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // }
1325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //
1335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // public static class Poly1305
1345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     extends BaseMac
1355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // {
1365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     public Poly1305()
1375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     {
1385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //         super(new org.bouncycastle.crypto.macs.Poly1305(new AESFastEngine()));
1395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     }
1405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // }
1415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //
1425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // public static class Poly1305KeyGen
1435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     extends BaseKeyGenerator
1445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // {
1455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     public Poly1305KeyGen()
1465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     {
1475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //         super("Poly1305-AES", 256, new Poly1305KeyGenerator());
1485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     }
1495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // }
1504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
151a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
1524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static public class Wrap
1534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseWrapCipher
1544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
1554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Wrap()
1564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new AESWrapEngine());
1584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
1624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class RFC3211Wrap
1634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseWrapCipher
1644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
1654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public RFC3211Wrap()
1664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
1674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(new RFC3211WrapEngine(new AESFastEngine()), 16);
1684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
1694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
1704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
1714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
172a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
173a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
174a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithAES-CBC
175a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
176a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithAESCBC
177a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends BaseBlockCipher
178a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
179a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithAESCBC()
180a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
181a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super(new CBCBlockCipher(new AESFastEngine()));
182a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
183a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
184a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
1854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class KeyGen
1864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseKeyGenerator
1874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
1884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyGen()
1894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            this(192);
1914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyGen(int keySize)
1944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
1954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super("AES", keySize, new CipherKeyGenerator());
1964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
1994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // BEGIN android-removed
2004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class KeyGen128
2014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends KeyGen
2024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
2034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public KeyGen128()
2044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
2054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(128);
2064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
2074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
2084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class KeyGen192
2104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends KeyGen
2114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
2124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public KeyGen192()
2134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
2144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(192);
2154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
2164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
2174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
2184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class KeyGen256
2194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends KeyGen
2204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
2214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     public KeyGen256()
2224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
2234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         super(256);
2244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
2254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
226a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // END android-removed
227a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
228a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
229a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHA1And128BitAES-BC
230a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
231a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd128BitAESBC
232a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
233a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
234a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd128BitAESBC()
235a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
236a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHA1And128BitAES-CBC-BC", null, true, PKCS12, SHA1, 128, 128);
237a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
238a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
239a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
240a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
241a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHA1And192BitAES-BC
242a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
243a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd192BitAESBC
244a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
245a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
246a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd192BitAESBC()
247a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
248a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHA1And192BitAES-CBC-BC", null, true, PKCS12, SHA1, 192, 128);
249a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
250a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
251a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
252a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
253a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHA1And256BitAES-BC
254a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
255a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd256BitAESBC
256a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
257a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
258a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd256BitAESBC()
259a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
260a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHA1And256BitAES-CBC-BC", null, true, PKCS12, SHA1, 256, 128);
261a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
262a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
263a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
264a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
265a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHA256And128BitAES-BC
266a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
267a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHA256And128BitAESBC
268a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
269a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
270a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHA256And128BitAESBC()
271a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
272a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHA256And128BitAES-CBC-BC", null, true, PKCS12, SHA256, 128, 128);
273a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
274a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
275a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
276a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
277a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHA256And192BitAES-BC
278a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
279a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHA256And192BitAESBC
280a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
281a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
282a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHA256And192BitAESBC()
283a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
284a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHA256And192BitAES-CBC-BC", null, true, PKCS12, SHA256, 192, 128);
285a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
286a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
287a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
288a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
289a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHA256And256BitAES-BC
290a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
291a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHA256And256BitAESBC
292a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
293a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
294a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHA256And256BitAESBC()
295a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
296a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHA256And256BitAES-CBC-BC", null, true, PKCS12, SHA256, 256, 128);
297a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
298a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
299a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
300a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
301a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithMD5And128BitAES-OpenSSL
302a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
303a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithMD5And128BitAESCBCOpenSSL
304a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
305a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
306a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithMD5And128BitAESCBCOpenSSL()
307a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
308a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithMD5And128BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 128, 128);
309a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
310a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
311a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
312a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
313a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithMD5And192BitAES-OpenSSL
314a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
315a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithMD5And192BitAESCBCOpenSSL
316a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
317a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
318a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithMD5And192BitAESCBCOpenSSL()
319a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
320a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithMD5And192BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 192, 128);
321a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
322a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
323a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
324a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
325a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithMD5And256BitAES-OpenSSL
326a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
327a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithMD5And256BitAESCBCOpenSSL
328a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
329a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
330a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithMD5And256BitAESCBCOpenSSL()
331a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
332a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithMD5And256BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 256, 128);
333a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
334a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
335a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
336a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // BEGIN android-removed
3374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // public static class AlgParamGen
3384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     extends BaseAlgorithmParameterGenerator
3394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // {
3404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     protected void engineInit(
3414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         AlgorithmParameterSpec genParamSpec,
3424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         SecureRandom random)
3434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         throws InvalidAlgorithmParameterException
3444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
3454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
3464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
3474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
3484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     protected AlgorithmParameters engineGenerateParameters()
3494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     {
3504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         byte[]  iv = new byte[16];
3514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
3524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         if (random == null)
3534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         {
3544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             random = new SecureRandom();
3554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         }
3564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
3574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         random.nextBytes(iv);
3584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
3594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         AlgorithmParameters params;
3604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
3614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         try
3624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         {
3634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
3644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             params.init(new IvParameterSpec(iv));
3654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         }
3664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         catch (Exception e)
3674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         {
3684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //             throw new RuntimeException(e.getMessage());
3694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         }
3704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //
3714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //         return params;
3724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    //     }
3734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // }
3744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    // END android-removed
3754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class AlgParams
3774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends IvAlgorithmParameters
3784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
3794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        protected String engineToString()
3804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
3814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return "AES IV";
3824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
3834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
3844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3855db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    public static class AlgParamsGCM
3865db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        extends BaseAlgorithmParameters
3875db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    {
3885db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        private GCMParameters gcmParams;
3895db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
3905db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected void engineInit(AlgorithmParameterSpec paramSpec)
3915db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throws InvalidParameterSpecException
3925db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
3935db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            if (gcmSpecClass != null)
3945db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            {
3955db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                try
3965db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                {
3975db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    Method tLen = gcmSpecClass.getDeclaredMethod("getTLen", new Class[0]);
3985db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    Method iv= gcmSpecClass.getDeclaredMethod("getIV", new Class[0]);
3995db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4005db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4015db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    gcmParams = new GCMParameters((byte[])iv.invoke(paramSpec, new Object[0]), ((Integer)tLen.invoke(paramSpec, new Object[0])).intValue());
4025db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                }
4035db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                catch (Exception e)
4045db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                {
4055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    throw new InvalidParameterSpecException("Cannot process GCMParameterSpec.");
4065db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                }
4075db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            }
4085db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4095db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected void engineInit(byte[] params)
4115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throws IOException
4125db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
4135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            gcmParams = GCMParameters.getInstance(params);
4145db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4155db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4165db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected void engineInit(byte[] params, String format)
4175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throws IOException
4185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
4195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            if (!isASN1FormatString(format))
4205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            {
4215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                throw new IOException("unknown format specified");
4225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            }
4235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            gcmParams = GCMParameters.getInstance(params);
4255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected byte[] engineGetEncoded()
4285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throws IOException
4295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
4305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            return gcmParams.getEncoded();
4315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected byte[] engineGetEncoded(String format)
4345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throws IOException
4355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
4365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            if (!isASN1FormatString(format))
4375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            {
4385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                throw new IOException("unknown format specified");
4395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            }
4405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            return gcmParams.getEncoded();
4425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected String engineToString()
4455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
4465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            return "GCM";
4475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        protected AlgorithmParameterSpec localEngineGetParameterSpec(Class paramSpec)
4505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throws InvalidParameterSpecException
4515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
4525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            if (gcmSpecClass != null)
4535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            {
4545db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                try
4555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                {
4565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    Constructor constructor = gcmSpecClass.getConstructor(new Class[] { byte[].class, Integer.class });
4575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4585db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    return (AlgorithmParameterSpec)constructor.newInstance(new Object[] { gcmParams.getNonce(), Integers.valueOf(gcmParams.getIcvLen()) });
4595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                }
4605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                catch (NoSuchMethodException e)
4615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                {
4625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    throw new InvalidParameterSpecException("no constructor found!");   // should never happen
4635db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                }
4645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                catch (Exception e)
4655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                {
4665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                    throw new InvalidParameterSpecException("construction failed: " + e.getMessage());   // should never happen
4675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root                }
4685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            }
4695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4705db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            throw new InvalidParameterSpecException("unknown parameter spec: " + paramSpec.getName());
4715db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
4725db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    }
4735db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
4744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class Mappings
475a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends SymmetricAlgorithmProvider
4764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
4774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String PREFIX = AES.class.getName();
4784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        /**
4804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom         * These three got introduced in some messages as a result of a typo in an
4814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom         * early document. We don't produce anything using these OID values, but we'll
4824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom         * read them.
4834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom         */
4844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String wrongAES128 = "2.16.840.1.101.3.4.2";
4854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String wrongAES192 = "2.16.840.1.101.3.4.22";
4864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String wrongAES256 = "2.16.840.1.101.3.4.42";
4874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Mappings()
4894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
4904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
4914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
4924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public void configure(ConfigurableProvider provider)
4934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
4944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("AlgorithmParameters.AES", PREFIX + "$AlgParams");
4954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + wrongAES128, "AES");
4964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + wrongAES192, "AES");
4974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + wrongAES256, "AES");
4984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
4994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
5004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
5014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
5025db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("AlgorithmParameters.GCM", PREFIX + "$AlgParamsGCM");
5035db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes128_GCM, "GCM");
5045db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_GCM, "GCM");
5055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_GCM, "GCM");
5065db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
5074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
5084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen");
5094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
5104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
5114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
5124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
5134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
5144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
5154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
5164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
5174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Cipher.AES", PREFIX + "$ECB");
5184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES128, "AES");
5194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES192, "AES");
5204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES256, "AES");
5214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
5224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB");
5234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB");
5244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB");
5254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC");
5264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC");
5274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC");
5284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB");
5294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB");
5304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB");
5314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB");
5324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB");
5334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB");
5344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
5354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Cipher.AESWRAP", PREFIX + "$Wrap");
5364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_wrap, "AESWRAP");
5374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_wrap, "AESWRAP");
5384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_wrap, "AESWRAP");
5394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
5404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap");
5414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
5424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
5435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Cipher.GCM", PREFIX + "$GCM");
5445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_GCM, "GCM");
5455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_GCM, "GCM");
5465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_GCM, "GCM");
5475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
5484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("KeyGenerator.AES", PREFIX + "$KeyGen");
5494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
5504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128");
5514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192");
5524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256");
5534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128");
5544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128");
5554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128");
5564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128");
5574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192");
5584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192");
5594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192");
5604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192");
5614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256");
5624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256");
5634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256");
5644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256");
5654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen");
5664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128");
5674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192");
5684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256");
5694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            //
5704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC");
5714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
572a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
573a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PBEWITHSHAAND128BITAES-CBC-BC");
574a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PBEWITHSHAAND192BITAES-CBC-BC");
575a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes256_cbc.getId(), "PBEWITHSHAAND256BITAES-CBC-BC");
576a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC");
577a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC");
578a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC");
579a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
580a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHAAND128BITAES-CBC-BC", PREFIX + "$PBEWithAESCBC");
581a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHAAND192BITAES-CBC-BC", PREFIX + "$PBEWithAESCBC");
582a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHAAND256BITAES-CBC-BC", PREFIX + "$PBEWithAESCBC");
583a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHA256AND128BITAES-CBC-BC", PREFIX + "$PBEWithAESCBC");
584a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHA256AND192BITAES-CBC-BC", PREFIX + "$PBEWithAESCBC");
585a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHA256AND256BITAES-CBC-BC", PREFIX + "$PBEWithAESCBC");
586a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
587a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND128BITAES-CBC-BC","PBEWITHSHAAND128BITAES-CBC-BC");
588a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND192BITAES-CBC-BC","PBEWITHSHAAND192BITAES-CBC-BC");
589a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND256BITAES-CBC-BC","PBEWITHSHAAND256BITAES-CBC-BC");
590a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA-1AND128BITAES-CBC-BC","PBEWITHSHAAND128BITAES-CBC-BC");
591a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA-1AND192BITAES-CBC-BC","PBEWITHSHAAND192BITAES-CBC-BC");
592a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA-1AND256BITAES-CBC-BC","PBEWITHSHAAND256BITAES-CBC-BC");
593a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA-256AND128BITAES-CBC-BC","PBEWITHSHA256AND128BITAES-CBC-BC");
594a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA-256AND192BITAES-CBC-BC","PBEWITHSHA256AND192BITAES-CBC-BC");
595a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA-256AND256BITAES-CBC-BC","PBEWITHSHA256AND256BITAES-CBC-BC");
596a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
597a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHMD5AND128BITAES-CBC-OPENSSL", PREFIX + "$PBEWithAESCBC");
598a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHMD5AND192BITAES-CBC-OPENSSL", PREFIX + "$PBEWithAESCBC");
599a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHMD5AND256BITAES-CBC-OPENSSL", PREFIX + "$PBEWithAESCBC");
600a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
601a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHMD5AND128BITAES-CBC-OPENSSL", PREFIX + "$PBEWithMD5And128BitAESCBCOpenSSL");
602a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHMD5AND192BITAES-CBC-OPENSSL", PREFIX + "$PBEWithMD5And192BitAESCBCOpenSSL");
603a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHMD5AND256BITAES-CBC-OPENSSL", PREFIX + "$PBEWithMD5And256BitAESCBCOpenSSL");
604a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
605a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND128BITAES-CBC-BC", PREFIX + "$PBEWithSHAAnd128BitAESBC");
606a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND192BITAES-CBC-BC", PREFIX + "$PBEWithSHAAnd192BitAESBC");
607a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND256BITAES-CBC-BC", PREFIX + "$PBEWithSHAAnd256BitAESBC");
608a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHA256AND128BITAES-CBC-BC", PREFIX + "$PBEWithSHA256And128BitAESBC");
609a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHA256AND192BITAES-CBC-BC", PREFIX + "$PBEWithSHA256And192BitAESBC");
610a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHA256AND256BITAES-CBC-BC", PREFIX + "$PBEWithSHA256And256BitAESBC");
611a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA1AND128BITAES-CBC-BC","PBEWITHSHAAND128BITAES-CBC-BC");
612a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA1AND192BITAES-CBC-BC","PBEWITHSHAAND192BITAES-CBC-BC");
613a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA1AND256BITAES-CBC-BC","PBEWITHSHAAND256BITAES-CBC-BC");
614a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA-1AND128BITAES-CBC-BC","PBEWITHSHAAND128BITAES-CBC-BC");
615a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA-1AND192BITAES-CBC-BC","PBEWITHSHAAND192BITAES-CBC-BC");
616a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA-1AND256BITAES-CBC-BC","PBEWITHSHAAND256BITAES-CBC-BC");
617a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA-256AND128BITAES-CBC-BC","PBEWITHSHA256AND128BITAES-CBC-BC");
618a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA-256AND192BITAES-CBC-BC","PBEWITHSHA256AND192BITAES-CBC-BC");
619a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA-256AND256BITAES-CBC-BC","PBEWITHSHA256AND256BITAES-CBC-BC");
620a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PBEWITHSHAAND128BITAES-CBC-BC");
621a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PBEWITHSHAAND192BITAES-CBC-BC");
622a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes256_cbc.getId(), "PBEWITHSHAAND256BITAES-CBC-BC");
623a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC");
624a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC");
625a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC");
626a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
627a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITAES-CBC-BC", "PKCS12PBE");
628a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND192BITAES-CBC-BC", "PKCS12PBE");
629a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND256BITAES-CBC-BC", "PKCS12PBE");
630a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA256AND128BITAES-CBC-BC", "PKCS12PBE");
631a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA256AND192BITAES-CBC-BC", "PKCS12PBE");
632a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA256AND256BITAES-CBC-BC", "PKCS12PBE");
633a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA1AND128BITAES-CBC-BC","PKCS12PBE");
634a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA1AND192BITAES-CBC-BC","PKCS12PBE");
635a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA1AND256BITAES-CBC-BC","PKCS12PBE");
636a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA-1AND128BITAES-CBC-BC","PKCS12PBE");
637a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA-1AND192BITAES-CBC-BC","PKCS12PBE");
638a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA-1AND256BITAES-CBC-BC","PKCS12PBE");
639a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND128BITAES-CBC-BC","PKCS12PBE");
640a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND192BITAES-CBC-BC","PKCS12PBE");
641a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND256BITAES-CBC-BC","PKCS12PBE");
642a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
643a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PKCS12PBE");
644a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PKCS12PBE");
645a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes256_cbc.getId(), "PKCS12PBE");
646a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PKCS12PBE");
647a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PKCS12PBE");
648a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PKCS12PBE");
649a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
650a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // BEGIN android-removed
651a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // addGMacAlgorithm(provider, "AES", PREFIX + "$AESGMAC", PREFIX + "$KeyGen128");
6525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            // addPoly1305Algorithm(provider, "AES", PREFIX + "$Poly1305", PREFIX + "$Poly1305KeyGen");
653a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // END android-removed
6544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
6554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
6565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
6575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    private static Class lookup(String className)
6585db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    {
6595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        try
6605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
6615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            Class def = AES.class.getClassLoader().loadClass(className);
6625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
6635db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            return def;
6645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
6655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        catch (Exception e)
6665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        {
6675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            return null;
6685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        }
6695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    }
6704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom}
671