org.logi.crypto.modes
Class EncryptCBC

java.lang.Object
  |
  +--org.logi.crypto.Crypto
        |
        +--org.logi.crypto.modes.EncryptMode
              |
              +--org.logi.crypto.modes.EncryptCBC
All Implemented Interfaces:
EncryptSession, PrettyPrintable

public class EncryptCBC
extends org.logi.crypto.modes.EncryptMode

Cipher Block Chaining mode xors each plain block with the previous cipher block before encrypting.

Because CBC mode encrypts one block at a time, encryption is only performed when a full block of data has been sent to the object. This also means that when you call the flush() method, random data is appended to the block before encryption. This can be avoided in two ways: Either by flushing regularly and sending the size of the data packets to the reciever, or by using the CFB of OFB modes.

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

Fields inherited from class org.logi.crypto.Crypto
BIT, cdsPath, EMPTY_ARRAY, FOUR, keySource, NIBBLE, ONE, primeCertainty, random, TWO, ZERO
 
Constructor Summary
EncryptCBC()
          Create a new CBC-mode encrypt session with no key.
EncryptCBC(CipherKey key)
          Create a new CBC-mode encrypt session with the specified key.
 
Method Summary
 void close()
          Close files and kill threads owned by the object.
 byte[] encrypt(byte[] source, int i, int length)
          Send bytes to the EncryptCBC object for encryption.
 void finalize()
           
 byte[] flush()
          Pads the internal buffer, encrypts it and returns the ciphertext.
 byte[] flush(byte[] source, int i, int length)
          Equivalent to calling encrypt(source,i,length) followed by flush().
 CipherKey getKey()
          Return the key used for encryption.
 int plainBlockSize()
          Return the size of the blocks of plaintext encrypted by this object.
 void setKey(CipherKey key)
          Set the key to use for encryption.
 
Methods inherited from class org.logi.crypto.Crypto
binString, binString, ensureArrayLength, ensureArrayLength, equal, equalRelaxed, equalSub, fromHexNibble, fromHexString, fromString, fromString, hexString, hexString, hexString, hexString, hexString, initRandom, initRandom, makeClass, makeInt, makeLong, makeSessionKey, pastSpace, pickBits, pickBits, prettyPrint, prettyPrint, readBlock, readInt, trimArrayLength, trimArrayLength, trimLeadingZeroes, writeBytes, writeBytes, writeInt
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

EncryptCBC

public EncryptCBC(CipherKey key)
Create a new CBC-mode encrypt session with the specified key.

EncryptCBC

public EncryptCBC()
Create a new CBC-mode encrypt session with no key. No encryption can be performed until the setKey() method has been called.
Method Detail

getKey

public CipherKey getKey()
Return the key used for encryption.

plainBlockSize

public int plainBlockSize()
Return the size of the blocks of plaintext encrypted by this object.

setKey

public void setKey(CipherKey key)
            throws CryptoException
Set the key to use for encryption. Do not call this method when there may be data in the internal buffer.
Throws:
CryptoException - if there is data in the internal buffer which should be encrypted with the old key.

flush

public byte[] flush()
Pads the internal buffer, encrypts it and returns the ciphertext.

encrypt

public byte[] encrypt(byte[] source,
                      int i,
                      int length)
Send bytes to the EncryptCBC object for encryption.

Encrypt length bytes from source, starting at i and return the ciphertext. Data is encrypted in blocks, so only whole blocks of ciphertext are written to dest. Any remaining plaintext will be stored and prepended to source in the next call to encrypt.


flush

public byte[] flush(byte[] source,
                    int i,
                    int length)
Equivalent to calling encrypt(source,i,length) followed by flush().
Specified by:
flush in interface EncryptSession

close

public void close()
Description copied from interface: EncryptSession
Close files and kill threads owned by the object. This should be called to make sure all resources are freed.
Specified by:
close in interface EncryptSession

finalize

public void finalize()


Copyright 1997-2000 Logi Ragnarsson