For the latest news and information visit
The GNU Crypto project

gnu.crypto.cipher
Class Twofish

java.lang.Object
  extended bygnu.crypto.cipher.BaseCipher
      extended bygnu.crypto.cipher.Twofish
All Implemented Interfaces:
java.lang.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.2 $

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
 java.util.Iterator blockSizes()
          Returns an Iterator over the supported block sizes.
 java.lang.Object clone()
          Returns a clone of this instance.
 void decrypt(byte[] in, int inOffset, byte[] out, int outOffset, java.lang.Object sessionKey, int bs)
          Decrypts exactly one block of ciphertext.
 void encrypt(byte[] in, int inOffset, byte[] out, int outOffset, java.lang.Object sessionKey, int bs)
          Encrypts exactly one block of plaintext.
 java.util.Iterator keySizes()
          Returns an Iterator over the supported key sizes.
 java.lang.Object makeKey(byte[] k, int bs)
          Expands a user-supplied key material into a session key for a designated block size.
 boolean selfTest()
          A correctness test that consists of basic symmetric encryption / decryption test(s) for all supported block and key sizes, as well as one (1) variable key Known Answer Test (KAT).
 
Methods inherited from class gnu.crypto.cipher.BaseCipher
currentBlockSize, decryptBlock, defaultBlockSize, defaultKeySize, encryptBlock, init, name, reset, testKat, testKat
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Twofish

public Twofish()
Trivial 0-arguments constructor.

Method Detail

clone

public java.lang.Object clone()
Description copied from interface: IBlockCipher

Returns a clone of this instance.

Specified by:
clone in interface IBlockCipher
Specified by:
clone in class BaseCipher

blockSizes

public java.util.Iterator blockSizes()
Description copied from interface: IBlockCipher

Returns an Iterator over the supported block sizes. Each element returned by this object is an Integer.

Returns:
an Iterator over the supported block sizes.

keySizes

public java.util.Iterator keySizes()
Description copied from interface: IBlockCipher

Returns an Iterator over the supported key sizes. Each element returned by this object is an Integer.

Returns:
an Iterator over the supported key sizes.

makeKey

public java.lang.Object makeKey(byte[] k,
                                int bs)
                         throws java.security.InvalidKeyException

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:
java.lang.IllegalArgumentException - if the block size is not 16 (128-bit).
java.security.InvalidKeyException - if the key data is invalid.

encrypt

public void encrypt(byte[] in,
                    int inOffset,
                    byte[] out,
                    int outOffset,
                    java.lang.Object sessionKey,
                    int bs)
Description copied from interface: IBlockCipherSpi

Encrypts exactly one block of plaintext.

Parameters:
in - the plaintext.
inOffset - index of in from which to start considering data.
out - the ciphertext.
outOffset - index of out from which to store the result.
sessionKey - the session key to use.
bs - the block size to use.

decrypt

public void decrypt(byte[] in,
                    int inOffset,
                    byte[] out,
                    int outOffset,
                    java.lang.Object sessionKey,
                    int bs)
Description copied from interface: IBlockCipherSpi

Decrypts exactly one block of ciphertext.

Parameters:
in - the ciphertext.
inOffset - index of in from which to start considering data.
out - the plaintext.
outOffset - index of out from which to store the result.
sessionKey - the session key to use.
bs - the block size to use.

selfTest

public boolean selfTest()
Description copied from interface: IBlockCipher

A correctness test that consists of basic symmetric encryption / decryption test(s) for all supported block and key sizes, as well as one (1) variable key Known Answer Test (KAT).

Specified by:
selfTest in interface IBlockCipher
Overrides:
selfTest in class BaseCipher

For the latest news and information visit
The GNU Crypto project

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