For the latest news and information visit The GNU Crypto project

## gnu.crypto.cipher
Class TripleDES

    java.lang.Object
      |
      +--gnu.crypto.cipher.BaseCipher
            |
            +--gnu.crypto.cipher.TripleDES

All Implemented Interfaces:
  java.lang.Cloneable, IBlockCipher, gnu.crypto.cipher.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.

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`
  Returns:
    a clone copy of this instance.

### 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: `gnu.crypto.cipher.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: `gnu.crypto.cipher.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: `gnu.crypto.cipher.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, 2004 Free Software Foundation, Inc.