1a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric;
2a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
3a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed
4a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.BlockCipher;
5a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.CipherKeyGenerator;
6a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed
7a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.engines.TwofishEngine;
8a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed
95db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// import org.bouncycastle.crypto.generators.Poly1305KeyGenerator;
10a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.macs.GMac;
11a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed
12a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.modes.CBCBlockCipher;
13a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed
14a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.modes.GCMBlockCipher;
15a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed
16a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
17a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
18a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed
19a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
20a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
21a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider;
22a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters;
23a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed
24a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory;
25a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
26a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrompublic final class Twofish
27a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom{
28a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    private Twofish()
29a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
30a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
31a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
32a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // BEGIN android-removed
33a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // public static class ECB
34a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     extends BaseBlockCipher
35a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // {
36a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     public ECB()
37a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     {
38a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         super(new BlockCipherProvider()
39a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         {
40a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //             public BlockCipher get()
41a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //             {
42a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //                 return new TwofishEngine();
43a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //             }
44a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         });
45a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     }
46a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // }
47a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //
48a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // public static class KeyGen
49a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     extends BaseKeyGenerator
50a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // {
51a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     public KeyGen()
52a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     {
53a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         super("Twofish", 256, new CipherKeyGenerator());
54a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     }
55a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // }
56a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //
57a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // public static class GMAC
58a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     extends BaseMac
59a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // {
60a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     public GMAC()
61a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     {
62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         super(new GMac(new GCMBlockCipher(new TwofishEngine())));
63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     }
64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // }
655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //
665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // public static class Poly1305
675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     extends BaseMac
685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // {
695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     public Poly1305()
705db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     {
715db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //         super(new org.bouncycastle.crypto.macs.Poly1305(new TwofishEngine()));
725db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     }
735db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // }
745db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //
755db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // public static class Poly1305KeyGen
765db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     extends BaseKeyGenerator
775db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // {
785db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     public Poly1305KeyGen()
795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     {
805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //         super("Poly1305-Twofish", 256, new Poly1305KeyGenerator());
815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    //     }
825db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    // }
83a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // END android-removed
84a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
85a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
86a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAndTwofish-CBC
87a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
88a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHAKeyFactory
89a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends PBESecretKeyFactory
90a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
91a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHAKeyFactory()
92a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
93a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super("PBEwithSHAandTwofish-CBC", null, true, PKCS12, SHA1, 256, 128);
94a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
95a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
96a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
97a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
98a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * PBEWithSHAAndTwofish-CBC
99a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
100a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    static public class PBEWithSHA
101a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends BaseBlockCipher
102a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
103a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public PBEWithSHA()
104a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
105a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            super(new CBCBlockCipher(new TwofishEngine()));
106a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
107a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
108a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
109a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // BEGIN android-removed
110a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // public static class AlgParams
111a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     extends IvAlgorithmParameters
112a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // {
113a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     protected String engineToString()
114a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     {
115a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //         return "Twofish IV";
116a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    //     }
117a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // }
118a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    // END android-removed
119a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
120a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    public static class Mappings
121a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        extends SymmetricAlgorithmProvider
122a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
123a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        private static final String PREFIX = Twofish.class.getName();
124a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
125a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public Mappings()
126a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
127a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
128a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
129a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        public void configure(ConfigurableProvider provider)
130a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        {
131a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // BEGIN android-removed
132a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // provider.addAlgorithm("Cipher.Twofish", PREFIX + "$ECB");
133a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // provider.addAlgorithm("KeyGenerator.Twofish", PREFIX + "$KeyGen");
134a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // provider.addAlgorithm("AlgorithmParameters.Twofish", PREFIX + "$AlgParams");
135a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // END android-removed
136a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
137a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE");
138a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE");
139a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("Cipher.PBEWITHSHAANDTWOFISH-CBC",  PREFIX + "$PBEWithSHA");
140a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAANDTWOFISH-CBC", PREFIX + "$PBEWithSHAKeyFactory");
141a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
142a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // BEGIN android-removed
143a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // addGMacAlgorithm(provider, "Twofish", PREFIX + "$GMAC", PREFIX + "$KeyGen");
1445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            // addPoly1305Algorithm(provider, "Twofish", PREFIX + "$Poly1305", PREFIX + "$Poly1305KeyGen");
145a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            // END android-removed
146a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        }
147a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
148a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom}
149