Class CtrCryptoOutputStream

java.lang.Object
java.io.OutputStream
org.apache.commons.crypto.stream.CryptoOutputStream
org.apache.commons.crypto.stream.CtrCryptoOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable, Channel, WritableByteChannel

public class CtrCryptoOutputStream extends CryptoOutputStream

CtrCryptoOutputStream encrypts data. It is not thread-safe. AES CTR mode is required in order to ensure that the plain text and cipher text have a 1:1 mapping. The encryption is buffer based. The key points of the encryption are (1) calculating counter and (2) padding through stream position.

counter = base + pos/(algorithm blocksize); padding = pos%(algorithm blocksize);

The underlying stream offset is maintained as state.

This class should only be used with blocking sinks. Using this class to wrap a non-blocking sink may lead to high CPU usage.

  • Field Details

    • streamOffset

      private long streamOffset
      Underlying stream offset.
    • initIV

      private final byte[] initIV
      The initial IV.
    • iv

      private final byte[] iv
      Initialization vector for the cipher.
    • padding

      private byte padding
      Padding = pos%(algorithm blocksize); Padding is put into CryptoOutputStream.inBuffer before any other data goes in. The purpose of padding is to put input data at proper position.
    • cipherReset

      private boolean cipherReset
      Flag to mark whether the cipher has been reset
  • Constructor Details

    • CtrCryptoOutputStream

      protected CtrCryptoOutputStream(Output output, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      output - the Output instance.
      cipher - the CryptoCipher instance.
      bufferSize - the bufferSize.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      protected CtrCryptoOutputStream(Output output, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv, long streamOffset) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      output - the output stream.
      cipher - the CryptoCipher instance.
      bufferSize - the bufferSize.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      streamOffset - the start offset in the data.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      protected CtrCryptoOutputStream(OutputStream out, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      out - the output stream.
      cipher - the CryptoCipher instance.
      bufferSize - the bufferSize.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      protected CtrCryptoOutputStream(OutputStream outputStream, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv, long streamOffset) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      outputStream - the output stream.
      cipher - the CryptoCipher instance.
      bufferSize - the bufferSize.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      streamOffset - the start offset in the data.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      public CtrCryptoOutputStream(Properties props, OutputStream out, byte[] key, byte[] iv) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      props - The Properties class represents a set of properties.
      out - the output stream.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      public CtrCryptoOutputStream(Properties properties, OutputStream outputStream, byte[] key, byte[] iv, long streamOffset) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      properties - The Properties class represents a set of properties.
      outputStream - the output stream.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      streamOffset - the start offset in the data.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      public CtrCryptoOutputStream(Properties props, WritableByteChannel out, byte[] key, byte[] iv) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      props - The Properties class represents a set of properties.
      out - the WritableByteChannel instance.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      public CtrCryptoOutputStream(Properties properties, WritableByteChannel channel, byte[] key, byte[] iv, long streamOffset) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      properties - The Properties class represents a set of properties.
      channel - the WritableByteChannel instance.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      streamOffset - the start offset in the data.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      protected CtrCryptoOutputStream(WritableByteChannel channel, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      channel - the WritableByteChannel instance.
      cipher - the CryptoCipher instance.
      bufferSize - the bufferSize.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      Throws:
      IOException - if an I/O error occurs.
    • CtrCryptoOutputStream

      protected CtrCryptoOutputStream(WritableByteChannel channel, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv, long streamOffset) throws IOException
      Constructs a CtrCryptoOutputStream.
      Parameters:
      channel - the WritableByteChannel instance.
      cipher - the CryptoCipher instance.
      bufferSize - the bufferSize.
      key - crypto key for the cipher.
      iv - Initialization vector for the cipher.
      streamOffset - the start offset in the data.
      Throws:
      IOException - if an I/O error occurs.
  • Method Details