Package org.apache.commons.crypto.stream
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
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 Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
Flag to mark whether the cipher has been resetprivate final byte[]
The initial IV.private final byte[]
Initialization vector for the cipher.private byte
Padding = pos%(algorithm blocksize); Padding is put intoCryptoOutputStream.inBuffer
before any other data goes in.private long
Underlying stream offset. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
CtrCryptoOutputStream
(OutputStream out, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv) Constructs aCtrCryptoOutputStream
.protected
CtrCryptoOutputStream
(OutputStream outputStream, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv, long streamOffset) Constructs aCtrCryptoOutputStream
.protected
CtrCryptoOutputStream
(WritableByteChannel channel, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv) Constructs aCtrCryptoOutputStream
.protected
CtrCryptoOutputStream
(WritableByteChannel channel, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv, long streamOffset) Constructs aCtrCryptoOutputStream
.CtrCryptoOutputStream
(Properties props, OutputStream out, byte[] key, byte[] iv) Constructs aCtrCryptoOutputStream
.CtrCryptoOutputStream
(Properties properties, OutputStream outputStream, byte[] key, byte[] iv, long streamOffset) Constructs aCtrCryptoOutputStream
.CtrCryptoOutputStream
(Properties props, WritableByteChannel out, byte[] key, byte[] iv) Constructs aCtrCryptoOutputStream
.CtrCryptoOutputStream
(Properties properties, WritableByteChannel channel, byte[] key, byte[] iv, long streamOffset) Constructs aCtrCryptoOutputStream
.protected
CtrCryptoOutputStream
(Output output, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv) Constructs aCtrCryptoOutputStream
.protected
CtrCryptoOutputStream
(Output output, CryptoCipher cipher, int bufferSize, byte[] key, byte[] iv, long streamOffset) Constructs aCtrCryptoOutputStream
. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
encrypt()
Does the encryption, input isCryptoOutputStream.inBuffer
and output isCryptoOutputStream.outBuffer
.private void
encryptBuffer
(ByteBuffer out) Does the encryption if the ByteBuffer data.protected void
Does final encryption of the last data.protected long
Get the underlying stream offsetprotected void
Overrides theCryptoOutputStream.initCipher()
.private void
Resets theCryptoOutputStream.cipher
: calculate counter andpadding
.protected void
setStreamOffset
(long streamOffset) Set the underlying stream offsetMethods inherited from class org.apache.commons.crypto.stream.CryptoOutputStream
checkStream, close, flush, freeBuffers, getBufferSize, getCipher, getInBuffer, getOutBuffer, isOpen, write, write, write
Methods inherited from class java.io.OutputStream
write
-
Field Details
-
streamOffset
private long streamOffsetUnderlying stream offset. -
initIV
private final byte[] initIVThe initial IV. -
iv
private final byte[] ivInitialization vector for the cipher. -
padding
private byte paddingPadding = pos%(algorithm blocksize); Padding is put intoCryptoOutputStream.inBuffer
before any other data goes in. The purpose of padding is to put input data at proper position. -
cipherReset
private boolean cipherResetFlag 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 aCtrCryptoOutputStream
.- 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 aCtrCryptoOutputStream
.- 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 aCtrCryptoOutputStream
.- 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 aCtrCryptoOutputStream
.- 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 aCtrCryptoOutputStream
.- Parameters:
props
- TheProperties
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 aCtrCryptoOutputStream
.- Parameters:
properties
- TheProperties
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 aCtrCryptoOutputStream
.- Parameters:
props
- TheProperties
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 aCtrCryptoOutputStream
.- Parameters:
properties
- TheProperties
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 aCtrCryptoOutputStream
.- 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 aCtrCryptoOutputStream
.- 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
-
encrypt
Does the encryption, input isCryptoOutputStream.inBuffer
and output isCryptoOutputStream.outBuffer
.- Overrides:
encrypt
in classCryptoOutputStream
- Throws:
IOException
- if an I/O error occurs.
-
encryptBuffer
Does the encryption if the ByteBuffer data.- Parameters:
out
- the output ByteBuffer.- Throws:
IOException
- if an I/O error occurs.
-
encryptFinal
Does final encryption of the last data.- Overrides:
encryptFinal
in classCryptoOutputStream
- Throws:
IOException
- if an I/O error occurs.
-
getStreamOffset
protected long getStreamOffset()Get the underlying stream offset- Returns:
- the underlying stream offset
-
initCipher
protected void initCipher()Overrides theCryptoOutputStream.initCipher()
. Initializes the cipher.- Overrides:
initCipher
in classCryptoOutputStream
-
resetCipher
Resets theCryptoOutputStream.cipher
: calculate counter andpadding
.- Throws:
IOException
- if an I/O error occurs.
-
setStreamOffset
protected void setStreamOffset(long streamOffset) Set the underlying stream offset- Parameters:
streamOffset
- the underlying stream offset
-