/* See LICENSE for licensing and NOTICE for copyright. */ package org.cryptacular.spec; import org.bouncycastle.crypto.BlockCipher; import org.bouncycastle.crypto.engines.AESFastEngine; import org.bouncycastle.crypto.engines.BlowfishEngine; import org.bouncycastle.crypto.engines.CAST5Engine; import org.bouncycastle.crypto.engines.CAST6Engine; import org.bouncycastle.crypto.engines.CamelliaEngine; import org.bouncycastle.crypto.engines.DESEngine; import org.bouncycastle.crypto.engines.DESedeEngine; import org.bouncycastle.crypto.engines.GOST28147Engine; import org.bouncycastle.crypto.engines.NoekeonEngine; import org.bouncycastle.crypto.engines.RC2Engine; import org.bouncycastle.crypto.engines.RC564Engine; import org.bouncycastle.crypto.engines.RC6Engine; import org.bouncycastle.crypto.engines.SEEDEngine; import org.bouncycastle.crypto.engines.SerpentEngine; import org.bouncycastle.crypto.engines.SkipjackEngine; import org.bouncycastle.crypto.engines.TEAEngine; import org.bouncycastle.crypto.engines.TwofishEngine; import org.bouncycastle.crypto.engines.XTEAEngine; /** * Block cipher specification. * * @author Middleware Services */ public class BlockCipherSpec implements Spec<BlockCipher> { /** Cipher algorithm algorithm. */ private final String algorithm; /** * Creates a new instance that describes the given block cipher algorithm. * * @param algName Block cipher algorithm. */ public BlockCipherSpec(final String algName) { this.algorithm = algName; } @Override public String getAlgorithm() { return algorithm; } @Override public BlockCipher newInstance() { BlockCipher cipher; if ("AES".equalsIgnoreCase(algorithm)) { cipher = new AESFastEngine(); } else if ("Blowfish".equalsIgnoreCase(algorithm)) { cipher = new BlowfishEngine(); } else if ("Camellia".equalsIgnoreCase(algorithm)) { cipher = new CamelliaEngine(); } else if ("CAST5".equalsIgnoreCase(algorithm)) { cipher = new CAST5Engine(); } else if ("CAST6".equalsIgnoreCase(algorithm)) { cipher = new CAST6Engine(); } else if ("DES".equalsIgnoreCase(algorithm)) { cipher = new DESEngine(); } else if ("DESede".equalsIgnoreCase(algorithm) || "DES3".equalsIgnoreCase(algorithm)) { cipher = new DESedeEngine(); } else if ("GOST".equalsIgnoreCase(algorithm) || "GOST28147".equals(algorithm)) { cipher = new GOST28147Engine(); } else if ("Noekeon".equalsIgnoreCase(algorithm)) { cipher = new NoekeonEngine(); } else if ("RC2".equalsIgnoreCase(algorithm)) { cipher = new RC2Engine(); } else if ("RC5".equalsIgnoreCase(algorithm)) { cipher = new RC564Engine(); } else if ("RC6".equalsIgnoreCase(algorithm)) { cipher = new RC6Engine(); } else if ("SEED".equalsIgnoreCase(algorithm)) { cipher = new SEEDEngine(); } else if ("Serpent".equalsIgnoreCase(algorithm)) { cipher = new SerpentEngine(); } else if ("Skipjack".equalsIgnoreCase(algorithm)) { cipher = new SkipjackEngine(); } else if ("TEA".equalsIgnoreCase(algorithm)) { cipher = new TEAEngine(); } else if ("Twofish".equalsIgnoreCase(algorithm)) { cipher = new TwofishEngine(); } else if ("XTEA".equalsIgnoreCase(algorithm)) { cipher = new XTEAEngine(); } else { throw new IllegalStateException("Unsupported cipher algorithm " + algorithm); } return cipher; } @Override public String toString() { return algorithm; } }