org.logi.crypto.keys
Class DESKey

java.lang.Object
  |
  +--org.logi.crypto.Crypto
        |
        +--org.logi.crypto.keys.K
              |
              +--org.logi.crypto.keys.SymmetricKey
                    |
                    +--org.logi.crypto.keys.DESKey
All Implemented Interfaces:
CipherKey, Key

public class DESKey
extends SymmetricKey
implements CipherKey

This is the class for Data Encryption Standard (DES) keys. DES is the most widely used block cipher, although it is nowadays normally used repeatedly for each piece of plain-text and is called triple-DES. This is because the 56-bit key-size of the normal DES is too small to offer complete security.

The CDS for a DES key is DESKey(key) with key a string of 16 hexadecimal digits to create a specific key or DESKey(?) for a random DESKey object.

This implementation is done from the description given in Schneier's Applied Cryptography and #################.

Author:
Logi Ragnarsson (logir@logi.org)
See Also:
TriDESKey

Fields inherited from class org.logi.crypto.Crypto
BIT, cdsPath, EMPTY_ARRAY, FOUR, keySource, NIBBLE, ONE, primeCertainty, random, TWO, ZERO
 
Constructor Summary
DESKey()
          Create a new random DES key.
DESKey(byte[] key)
          Create a new DES key with the key bits from key[0..7].
DESKey(long key)
          Create a new DES key with the key bits from key.
 
Method Summary
 int cipherBlockSize()
          The block-size for the DES cipher is 8 bytes.
 void decrypt(byte[] source, int i, byte[] dest, int j)
          Decrypt one block of data.
 void encrypt(byte[] source, int i, byte[] dest, int j)
          Encrypt one block of data.
 boolean equals(java.lang.Object o)
          Return true iff the two keys are equivalent.
 java.lang.String getAlgorithm()
          The name of the algorithm is "DES".
 byte[] getKey()
          Return the key-bits for this key as an array of 8 bytes.
 int getSize()
          The key-size for the DES cipher is 56 bits.
static DESKey parseCDS(java.lang.String key)
          If "DESKey( key )" is a valid CDS for a DESKey, then DESKey.parseCDS(key) will return the described DESKey object.
 int plainBlockSize()
          The block-size for the DES cipher is 8 bytes.
 java.lang.String toString()
          Return a CDS for this key.
 
Methods inherited from class org.logi.crypto.keys.SymmetricKey
isPrivate, matches
 
Methods inherited from class org.logi.crypto.keys.K
getFingerprint, getFingerprint, hashCode, matchFingerprint, matchFingerprint
 
Methods inherited from class org.logi.crypto.Crypto
binString, binString, equal, equalRelaxed, equalSub, fromHexNibble, fromHexString, fromString, fromString, hexString, hexString, hexString, hexString, hexString, initRandom, initRandom, makeClass, makeInt, makeLong, makeSessionKey, pastSpace, pickBits, pickBits, readBlock, readInt, writeBytes, writeBytes, writeInt
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.logi.crypto.keys.Key
getFingerprint, getFingerprint, hashCode, isPrivate, matches, matchFingerprint, matchFingerprint
 

Constructor Detail

DESKey

public DESKey()
Create a new random DES key.

DESKey

public DESKey(byte[] key)
Create a new DES key with the key bits from key[0..7].

DESKey

public DESKey(long key)
Create a new DES key with the key bits from key.
Method Detail

parseCDS

public static DESKey parseCDS(java.lang.String key)
                       throws InvalidCDSException
If "DESKey( key )" is a valid CDS for a DESKey, then DESKey.parseCDS(key) will return the described DESKey object.

A valid CDS can be created by calling the DESKey.toString() method.

Throws:
InvalidCDSException - if the CDS is malformed.
See Also:
Crypto.fromString(String)

plainBlockSize

public int plainBlockSize()
The block-size for the DES cipher is 8 bytes.
Specified by:
plainBlockSize in interface CipherKey

cipherBlockSize

public int cipherBlockSize()
The block-size for the DES cipher is 8 bytes.
Specified by:
cipherBlockSize in interface CipherKey

getSize

public int getSize()
The key-size for the DES cipher is 56 bits.
Specified by:
getSize in interface Key

getAlgorithm

public java.lang.String getAlgorithm()
The name of the algorithm is "DES".
Specified by:
getAlgorithm in interface Key

equals

public boolean equals(java.lang.Object o)
Return true iff the two keys are equivalent.
Overrides:
equals in class java.lang.Object

getKey

public byte[] getKey()
Return the key-bits for this key as an array of 8 bytes.

toString

public java.lang.String toString()
Return a CDS for this key.
Overrides:
toString in class java.lang.Object
See Also:
Crypto.fromString(java.io.Reader)

encrypt

public void encrypt(byte[] source,
                    int i,
                    byte[] dest,
                    int j)
Encrypt one block of data. The plaintext is taken from source[i..i+7] and ciphertext is written to dest[j..j+7]
Specified by:
encrypt in interface CipherKey

decrypt

public void decrypt(byte[] source,
                    int i,
                    byte[] dest,
                    int j)
Decrypt one block of data. The encrypted data is taken from dest[i..i+7] and plaintext is written to source[j..j+7].
Specified by:
decrypt in interface CipherKey


Copyright 1997-2000 Logi Ragnarsson