14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric;
24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.CipherKeyGenerator;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.engines.BlowfishEngine;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.modes.CBCBlockCipher;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters;
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic final class Blowfish
134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private Blowfish()
154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class ECB
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public ECB()
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new BlowfishEngine());
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class CBC
284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseBlockCipher
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public CBC()
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super(new CBCBlockCipher(new BlowfishEngine()), 64);
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class KeyGen
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends BaseKeyGenerator
384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public KeyGen()
404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            super("Blowfish", 128, new CipherKeyGenerator());
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class AlgParams
464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends IvAlgorithmParameters
474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        protected String engineToString()
494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return "Blowfish IV";
514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static class Mappings
554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        extends AlgorithmProvider
564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        private static final String PREFIX = Blowfish.class.getName();
584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public Mappings()
604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        public void configure(ConfigurableProvider provider)
644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Cipher.BLOWFISH", PREFIX + "$ECB");
674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // BEGIN android-removed
684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC");
694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            // END android-removed
704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("KeyGenerator.BLOWFISH", PREFIX + "$KeyGen");
714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.KeyGenerator.1.3.6.1.4.1.3029.1.2", "BLOWFISH");
724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("AlgorithmParameters.BLOWFISH", PREFIX + "$AlgParams");
734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            provider.addAlgorithm("Alg.Alias.AlgorithmParameters.1.3.6.1.4.1.3029.1.2", "BLOWFISH");
744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom}
78