gnu.crypto.cipher

Class Twofish

Implemented Interfaces:
Cloneable, IBlockCipher, IBlockCipherSpi

public final class Twofish
extends BaseCipher

Twofish is a balanced 128-bit Feistel cipher, consisting of 16 rounds. In each round, a 64-bit S-box value is computed from 64 bits of the block, and this value is xored into the other half of the block. The two half-blocks are then exchanged, and the next round begins. Before the first round, all input bits are xored with key-dependent "whitening" subkeys, and after the final round the output bits are xored with other key-dependent whitening subkeys; these subkeys are not used anywhere else in the algorithm.

Twofish is designed by Bruce Schneier, Doug Whiting, John Kelsey, Chris Hall, David Wagner and Niels Ferguson.

References:

  1. Twofish: A 128-bit Block Cipher.

Version:
$Revision: 1.9 $

Field Summary

Fields inherited from class gnu.crypto.cipher.BaseCipher

currentBlockSize, currentKey, defaultBlockSize, defaultKeySize, lock, name

Fields inherited from interface gnu.crypto.cipher.IBlockCipher

CIPHER_BLOCK_SIZE, KEY_MATERIAL

Constructor Summary

Twofish()
Trivial 0-arguments constructor.

Method Summary

Iterator
blockSizes()
Object
clone()
void
decrypt(byte[] in, int inOffset, byte[] out, int outOffset, Object sessionKey, int bs)
void
encrypt(byte[] in, int inOffset, byte[] out, int outOffset, Object sessionKey, int bs)
Iterator
keySizes()
Object
makeKey(byte[] k, int bs)
Expands a user-supplied key material into a session key for a designated block size.
boolean
selfTest()

Methods inherited from class gnu.crypto.cipher.BaseCipher

clone, currentBlockSize, decryptBlock, defaultBlockSize, defaultKeySize, encryptBlock, init, name, reset, selfTest, testKat, testKat

Constructor Details

Twofish

public Twofish()
Trivial 0-arguments constructor.

Method Details

blockSizes

public Iterator blockSizes()
Specified by:
blockSizes in interface IBlockCipher
blockSizes in interface IBlockCipherSpi


clone

public Object clone()
Specified by:
clone in interface IBlockCipher
Overrides:
clone in interface BaseCipher


decrypt

public void decrypt(byte[] in,
                    int inOffset,
                    byte[] out,
                    int outOffset,
                    Object sessionKey,
                    int bs)
Specified by:
decrypt in interface IBlockCipherSpi


encrypt

public void encrypt(byte[] in,
                    int inOffset,
                    byte[] out,
                    int outOffset,
                    Object sessionKey,
                    int bs)
Specified by:
encrypt in interface IBlockCipherSpi


keySizes

public Iterator keySizes()
Specified by:
keySizes in interface IBlockCipher
keySizes in interface IBlockCipherSpi


makeKey

public Object makeKey(byte[] k,
                      int bs)
            throws InvalidKeyException
Expands a user-supplied key material into a session key for a designated block size.
Specified by:
makeKey in interface IBlockCipherSpi

Parameters:
k - the 64/128/192/256-bit user-key to use.
bs - the desired block size in bytes.

Returns:
an Object encapsulating the session key.


selfTest

public boolean selfTest()
Specified by:
selfTest in interface IBlockCipher
selfTest in interface IBlockCipherSpi
Overrides:
selfTest in interface BaseCipher


Copyright © 2001, 2002, 2003 Free Software Foundation, Inc. All Rights Reserved.