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