Class BufferedBlockCipher

java.lang.Object
org.bouncycastle.crypto.BufferedBlockCipher
Direct Known Subclasses:
DefaultBufferedBlockCipher

public class BufferedBlockCipher extends Object
A wrapper class that allows block ciphers to be used to process data in a piecemeal fashion. The BufferedBlockCipher outputs a block only when the buffer is full and more data is being added, or on a doFinal.

Note: in the case where the underlying cipher is either a CFB cipher or an OFB one the last block may not be a multiple of the block size.

  • Field Details

    • buf

      protected byte[] buf
    • bufOff

      protected int bufOff
    • forEncryption

      protected boolean forEncryption
    • cipher

      protected BlockCipher cipher
    • mbCipher

      protected MultiBlockCipher mbCipher
    • partialBlockOkay

      protected boolean partialBlockOkay
    • pgpCFB

      protected boolean pgpCFB
  • Constructor Details

    • BufferedBlockCipher

      public BufferedBlockCipher(BlockCipher cipher)
      Deprecated.
      use the constructor on DefaultBufferedBlockCipher.
      Create a buffered block cipher without padding.
      Parameters:
      cipher - the underlying block cipher this buffering object wraps.
  • Method Details

    • getUnderlyingCipher

      public BlockCipher getUnderlyingCipher()
      return the cipher this object wraps.
      Returns:
      the cipher this object wraps.
    • init

      public void init(boolean forEncryption, CipherParameters params) throws IllegalArgumentException
      initialise the cipher.
      Parameters:
      forEncryption - if true the cipher is initialised for encryption, if false for decryption.
      params - the key and other data required by the cipher.
      Throws:
      IllegalArgumentException - if the params argument is inappropriate.
    • getBlockSize

      public int getBlockSize()
      return the blocksize for the underlying cipher.
      Returns:
      the blocksize for the underlying cipher.
    • getUpdateOutputSize

      public int getUpdateOutputSize(int len)
      return the size of the output buffer required for an update an input of len bytes.
      Parameters:
      len - the length of the input.
      Returns:
      the space required to accommodate a call to update with len bytes of input.
    • getOutputSize

      public int getOutputSize(int length)
      return the size of the output buffer required for an update plus a doFinal with an input of 'length' bytes.
      Parameters:
      length - the length of the input.
      Returns:
      the space required to accommodate a call to update and doFinal with 'length' bytes of input.
    • processByte

      public int processByte(byte in, byte[] out, int outOff) throws DataLengthException, IllegalStateException
      process a single byte, producing an output block if necessary.
      Parameters:
      in - the input byte.
      out - the space for any output that might be produced.
      outOff - the offset from which the output will be copied.
      Returns:
      the number of output bytes copied to out.
      Throws:
      DataLengthException - if there isn't enough space in out.
      IllegalStateException - if the cipher isn't initialised.
    • processBytes

      public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) throws DataLengthException, IllegalStateException
      process an array of bytes, producing output if necessary.
      Parameters:
      in - the input byte array.
      inOff - the offset at which the input data starts.
      len - the number of bytes to be copied out of the input array.
      out - the space for any output that might be produced.
      outOff - the offset from which the output will be copied.
      Returns:
      the number of output bytes copied to out.
      Throws:
      DataLengthException - if there isn't enough space in out.
      IllegalStateException - if the cipher isn't initialised.
    • doFinal

      public int doFinal(byte[] out, int outOff) throws DataLengthException, IllegalStateException, InvalidCipherTextException
      Process the last block in the buffer.
      Parameters:
      out - the array the block currently being held is copied into.
      outOff - the offset at which the copying starts.
      Returns:
      the number of output bytes copied to out.
      Throws:
      DataLengthException - if there is insufficient space in out for the output, or the input is not block size aligned and should be.
      IllegalStateException - if the underlying cipher is not initialised.
      InvalidCipherTextException - if padding is expected and not found.
      DataLengthException - if the input is not block size aligned.
    • reset

      public void reset()
      Reset the buffer and cipher. After resetting the object is in the same state as it was after the last init (if there was one).