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