Class PaddedBufferedBlockCipher


public class PaddedBufferedBlockCipher extends DefaultBufferedBlockCipher
A wrapper class that allows block ciphers to be used to process data in a piecemeal fashion with padding. The PaddedBufferedBlockCipher outputs a block only when the buffer is full and more data is being added, or on a doFinal (unless the current block in the buffer is a pad block). The default padding mechanism used is the one outlined in PKCS5/PKCS7.
  • Constructor Details

    • PaddedBufferedBlockCipher

      public PaddedBufferedBlockCipher(BlockCipher cipher, BlockCipherPadding padding)
      Create a buffered block cipher with the desired padding.
      Parameters:
      cipher - the underlying block cipher this buffering object wraps.
      padding - the padding type.
    • PaddedBufferedBlockCipher

      public PaddedBufferedBlockCipher(BlockCipher cipher)
      Create a buffered block cipher PKCS7 padding
      Parameters:
      cipher - the underlying block cipher this buffering object wraps.
  • Method Details

    • init

      public void init(boolean forEncryption, CipherParameters params) throws IllegalArgumentException
      initialise the cipher.
      Overrides:
      init in class DefaultBufferedBlockCipher
      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.
    • getOutputSize

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

      public int getUpdateOutputSize(int len)
      return the size of the output buffer required for an update an input of len bytes.
      Overrides:
      getUpdateOutputSize in class DefaultBufferedBlockCipher
      Parameters:
      len - the length of the input.
      Returns:
      the space required to accommodate a call to update with len 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 neccessary.
      Overrides:
      processByte in class DefaultBufferedBlockCipher
      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.
      Overrides:
      processBytes in class DefaultBufferedBlockCipher
      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. If the buffer is currently full and padding needs to be added a call to doFinal will produce 2 * getBlockSize() bytes.
      Overrides:
      doFinal in class DefaultBufferedBlockCipher
      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 we are decrypting and the input is not block size aligned.
      IllegalStateException - if the underlying cipher is not initialised.
      InvalidCipherTextException - if padding is expected and not found.