gnu.crypto.cipher
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:
Version: $Revision: 1.10 $
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() |
Expands a user-supplied key material into a session key for a designated block size.
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.
Throws: IllegalArgumentException if the block size is not 16 (128-bit). InvalidKeyException if the key data is invalid.