For the latest news and information visit
The GNU Crypto project

gnu.crypto.cipher
Class TripleDES

java.lang.Object
  extended bygnu.crypto.cipher.BaseCipher
      extended bygnu.crypto.cipher.TripleDES
All Implemented Interfaces:
java.lang.Cloneable, IBlockCipher, IBlockCipherSpi

public class TripleDES
extends BaseCipher

Triple-DES, 3DES, or DESede is a combined cipher that uses three iterations of the Data Encryption Standard cipher to improve the security (at the cost of speed) of plain DES.

Triple-DES runs the DES algorithm three times with three independent 56 bit keys. To encrypt:

Ci = Ek3 ( Ek2-1 ( Ek1 ( Pi )))

And to decrypt:

Pi = Ek1-1 ( Ek2 ( Ek3-1 ( Ci )))

(The "ede" comes from the encryption operation, which runs Encrypt-Decrypt-Encrypt)

References:

  1. Bruce Schneier, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition. (1996 John Wiley and Sons) ISBN 0-471-11709-9. Page 294--295.

Version:
$Revision: 1.2 $

Field Summary
static int BLOCK_SIZE
          Triple-DES only operates on 64 bit blocks.
static int KEY_SIZE
          Triple-DES uses 168 bits of a parity-adjusted 192 bit key.
 
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
TripleDES()
          Default 0-arguments constructor.
 
Method Summary
static void adjustParity(byte[] kb, int offset)
          Transform a key so it will be parity adjusted.
 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 i, byte[] out, int o, java.lang.Object K, int bs)
          Decrypts exactly one block of ciphertext.
 void encrypt(byte[] in, int i, byte[] out, int o, java.lang.Object K, int bs)
          Encrypts exactly one block of plaintext.
static boolean isParityAdjusted(byte[] kb, int offset)
          Tests if a byte array has already been parity adjusted.
 java.util.Iterator keySizes()
          Returns an Iterator over the supported key sizes.
 java.lang.Object makeKey(byte[] kb, int bs)
          Expands a user-supplied key material into a session key for a designated block size.
 
Methods inherited from class gnu.crypto.cipher.BaseCipher
currentBlockSize, decryptBlock, defaultBlockSize, defaultKeySize, encryptBlock, init, name, reset, selfTest, testKat, testKat
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BLOCK_SIZE

public static final int BLOCK_SIZE
Triple-DES only operates on 64 bit blocks.

See Also:
Constant Field Values

KEY_SIZE

public static final int KEY_SIZE
Triple-DES uses 168 bits of a parity-adjusted 192 bit key.

See Also:
Constant Field Values
Constructor Detail

TripleDES

public TripleDES()
Default 0-arguments constructor.

Method Detail

adjustParity

public static void adjustParity(byte[] kb,
                                int offset)
Transform a key so it will be parity adjusted.

Parameters:
kb - The key bytes to adjust.
offset - The starting offset into the key bytes.
See Also:
DES.adjustParity(byte[],int)

isParityAdjusted

public static boolean isParityAdjusted(byte[] kb,
                                       int offset)
Tests if a byte array has already been parity adjusted.

Parameters:
kb - The key bytes to test.
offset - The starting offset into the key bytes.
Returns:
true if the bytes in kb starting at offset are parity adjusted.
See Also:
DES.isParityAdjusted(byte[],int), adjustParity(byte[],int)

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[] kb,
                                int bs)
                         throws java.security.InvalidKeyException
Description copied from interface: IBlockCipherSpi

Expands a user-supplied key material into a session key for a designated block size.

Parameters:
kb - the user-supplied key material.
bs - the desired block size in bytes.
Returns:
an Object encapsulating the session key.
Throws:
java.security.InvalidKeyException - if the key data is invalid.

encrypt

public void encrypt(byte[] in,
                    int i,
                    byte[] out,
                    int o,
                    java.lang.Object K,
                    int bs)
Description copied from interface: IBlockCipherSpi

Encrypts exactly one block of plaintext.

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

decrypt

public void decrypt(byte[] in,
                    int i,
                    byte[] out,
                    int o,
                    java.lang.Object K,
                    int bs)
Description copied from interface: IBlockCipherSpi

Decrypts exactly one block of ciphertext.

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

For the latest news and information visit
The GNU Crypto project

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