modeName = Strings.toUpperCase(mode);
if (modeName.equals("ECB"))
{
ivLength = 0;
cipher = new PaddedBufferedBlockCipher(baseEngine);
}
else if (modeName.equals("CBC"))
{
ivLength = baseEngine.getBlockSize();
cipher = new PaddedBufferedBlockCipher(
new CBCBlockCipher(baseEngine));
}
else if (modeName.startsWith("OFB"))
{
ivLength = baseEngine.getBlockSize();
if (modeName.length() != 3)
{
int wordSize = Integer.parseInt(modeName.substring(3));
cipher = new PaddedBufferedBlockCipher(
new OFBBlockCipher(baseEngine, wordSize));
}
else
{
cipher = new PaddedBufferedBlockCipher(
new OFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
}
}
else if (modeName.startsWith("CFB"))
{
ivLength = baseEngine.getBlockSize();
if (modeName.length() != 3)
{
int wordSize = Integer.parseInt(modeName.substring(3));
cipher = new PaddedBufferedBlockCipher(
new CFBBlockCipher(baseEngine, wordSize));
}
else
{
cipher = new PaddedBufferedBlockCipher(
new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
}
}
else if (modeName.startsWith("PGP"))
{
if (modeName.equalsIgnoreCase("PGPCFBwithIV"))
{
ivLength = baseEngine.getBlockSize();
cipher = new PaddedBufferedBlockCipher(
new PGPCFBBlockCipher(baseEngine, true));
}
else
{
ivLength = baseEngine.getBlockSize();
cipher = new PaddedBufferedBlockCipher(
new PGPCFBBlockCipher(baseEngine, false));
}
}
else if (modeName.equalsIgnoreCase("OpenPGPCFB"))
{
ivLength = 0;
cipher = new PaddedBufferedBlockCipher(
new OpenPGPCFBBlockCipher(baseEngine));
}
else if (modeName.startsWith("SIC"))
{
ivLength = baseEngine.getBlockSize();