14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric;
24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
3a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.CipherKeyGenerator;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.engines.RC4Engine;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseStreamCipher;
9a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory;
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic final class ARC4
134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ARC4()
154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class Base
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseStreamCipher
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Base()
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new RC4Engine(), 0);
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class KeyGen
284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseKeyGenerator
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyGen()
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-changed
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super("ARC4", 128, new CipherKeyGenerator());
344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-changed
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
38a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
39a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAnd128BitRC4
40a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
41a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd128BitKeyFactory
42a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
43a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
44a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd128BitKeyFactory()
45a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
46a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHAAnd128BitRC4", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, true, PKCS12, SHA1, 128, 0);
47a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
48a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
49a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
50a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
51a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAnd40BitRC4
52a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
53a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd40BitKeyFactory
54a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
55a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
56a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd40BitKeyFactory()
57a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
58a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEWithSHAAnd128BitRC4", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, true, PKCS12, SHA1, 40, 0);
59a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
60a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
61a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAnd128BitRC4
65a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
66a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd128Bit
67a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends BaseStreamCipher
68a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
69a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd128Bit()
70a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
71a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super(new RC4Engine(), 0);
72a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
73a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
74a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
75a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
76a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAnd40BitRC4
77a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
78a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAAnd40Bit
79a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends BaseStreamCipher
80a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
81a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAAnd40Bit()
82a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
83a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super(new RC4Engine(), 0);
84a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
85a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
86a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class Mappings
884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends AlgorithmProvider
894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String PREFIX = ARC4.class.getName();
914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Mappings()
934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public void configure(ConfigurableProvider provider)
974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Cipher.ARC4", PREFIX + "$Base");
99a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.rc4, "ARC4");
1004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.ARCFOUR", "ARC4");
1014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.RC4", "ARC4");
1024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("KeyGenerator.ARC4", PREFIX + "$KeyGen");
1034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.KeyGenerator.RC4", "ARC4");
1044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.KeyGenerator.1.2.840.113549.3.4", "ARC4");
105a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND128BITRC4", PREFIX + "$PBEWithSHAAnd128BitKeyFactory");
106a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND40BITRC4", PREFIX + "$PBEWithSHAAnd40BitKeyFactory");
107a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
108a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, "PKCS12PBE");
109a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC4, "PKCS12PBE");
110a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC4", "PKCS12PBE");
111a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC4", "PKCS12PBE");
112a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC4", "PKCS12PBE");
113a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHAAND128BITRC4", PREFIX + "$PBEWithSHAAnd128Bit");
114a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHAAND40BITRC4", PREFIX + "$PBEWithSHAAnd40Bit");
115a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
116a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, "PBEWITHSHAAND128BITRC4");
117a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC4, "PBEWITHSHAAND40BITRC4");
118a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
119a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC4", "PBEWITHSHAAND128BITRC4");
120a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC4", "PBEWITHSHAAND40BITRC4");
1214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
122a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, "PBEWITHSHAAND128BITRC4");
123a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC4, "PBEWITHSHAAND40BITRC4");
1244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
1254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
1264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom}
127