Twofish.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.bouncycastle.jcajce.provider.symmetric; 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BEGIN android-removed 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// import org.bouncycastle.crypto.BlockCipher; 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// import org.bouncycastle.crypto.CipherKeyGenerator; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// END android-removed 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.bouncycastle.crypto.engines.TwofishEngine; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BEGIN android-removed 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// import org.bouncycastle.crypto.macs.GMac; 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// END android-removed 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.bouncycastle.crypto.modes.CBCBlockCipher; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// BEGIN android-removed 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// import org.bouncycastle.crypto.modes.GCMBlockCipher; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// END android-removed 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BEGIN android-removed 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// import org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// END android-removed 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public final class Twofish 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private Twofish() 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BEGIN android-removed 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public static class ECB 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extends BaseBlockCipher 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public ECB() 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // super(new BlockCipherProvider() 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public BlockCipher get() 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return new TwofishEngine(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // }); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // } 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public static class KeyGen 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extends BaseKeyGenerator 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // public KeyGen() 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // super("Twofish", 256, new CipherKeyGenerator()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public static class GMAC 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extends BaseMac 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public GMAC() 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // super(new GMac(new GCMBlockCipher(new TwofishEngine()))); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // END android-removed 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * PBEWithSHAAndTwofish-CBC 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static public class PBEWithSHAKeyFactory 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extends PBESecretKeyFactory 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public PBEWithSHAKeyFactory() 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super("PBEwithSHAandTwofish-CBC", null, true, PKCS12, SHA1, 256, 128); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * PBEWithSHAAndTwofish-CBC 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static public class PBEWithSHA 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extends BaseBlockCipher 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public PBEWithSHA() 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(new CBCBlockCipher(new TwofishEngine())); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BEGIN android-removed 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // public static class AlgParams 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extends IvAlgorithmParameters 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // protected String engineToString() 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return "Twofish IV"; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // END android-removed 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static class Mappings 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extends SymmetricAlgorithmProvider 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final String PREFIX = Twofish.class.getName(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public Mappings() 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void configure(ConfigurableProvider provider) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BEGIN android-removed 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // provider.addAlgorithm("Cipher.Twofish", PREFIX + "$ECB"); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // provider.addAlgorithm("KeyGenerator.Twofish", PREFIX + "$KeyGen"); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // provider.addAlgorithm("AlgorithmParameters.Twofish", PREFIX + "$AlgParams"); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // END android-removed 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE"); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE"); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.addAlgorithm("Cipher.PBEWITHSHAANDTWOFISH-CBC", PREFIX + "$PBEWithSHA"); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAANDTWOFISH-CBC", PREFIX + "$PBEWithSHAKeyFactory"); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BEGIN android-removed 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // addGMacAlgorithm(provider, "Twofish", PREFIX + "$GMAC", PREFIX + "$KeyGen"); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // END android-removed 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)