public class CCMBlockCipher extends java.lang.Object implements AEADBlockCipher
Note: this mode is a packet mode - it needs all the data up front.
Constructor and Description |
---|
CCMBlockCipher(BlockCipher c)
Basic constructor.
|
Modifier and Type | Method and Description |
---|---|
int |
doFinal(byte[] out,
int outOff)
Finish the operation either appending or verifying the MAC at the end of the data.
|
java.lang.String |
getAlgorithmName()
Return the name of the algorithm.
|
byte[] |
getMac()
Returns a byte array containing the mac calculated as part of the
last encrypt or decrypt operation.
|
int |
getOutputSize(int len)
return the size of the output buffer required for a processBytes plus a
doFinal with an input of len bytes.
|
BlockCipher |
getUnderlyingCipher()
return the underlying block cipher that we are wrapping.
|
int |
getUpdateOutputSize(int len)
return the size of the output buffer required for a processBytes
an input of len bytes.
|
void |
init(boolean forEncryption,
CipherParameters params)
initialise the underlying cipher.
|
void |
processAADByte(byte in)
Add a single byte to the associated data check.
|
void |
processAADBytes(byte[] in,
int inOff,
int len)
Add a sequence of bytes to the associated data check.
|
int |
processByte(byte in,
byte[] out,
int outOff)
encrypt/decrypt a single byte.
|
int |
processBytes(byte[] in,
int inOff,
int inLen,
byte[] out,
int outOff)
process a block of bytes from in putting the result into out.
|
byte[] |
processPacket(byte[] in,
int inOff,
int inLen)
Process a packet of data for either CCM decryption or encryption.
|
int |
processPacket(byte[] in,
int inOff,
int inLen,
byte[] output,
int outOff)
Process a packet of data for either CCM decryption or encryption.
|
void |
reset()
Reset the cipher.
|
public CCMBlockCipher(BlockCipher c)
c
- the block cipher to be used.public BlockCipher getUnderlyingCipher()
getUnderlyingCipher
in interface AEADBlockCipher
public void init(boolean forEncryption, CipherParameters params) throws java.lang.IllegalArgumentException
AEADBlockCipher
init
in interface AEADBlockCipher
forEncryption
- true if we are setting up for encryption, false otherwise.params
- the necessary parameters for the underlying cipher to be initialised.java.lang.IllegalArgumentException
- if the params argument is inappropriate.public java.lang.String getAlgorithmName()
AEADBlockCipher
getAlgorithmName
in interface AEADBlockCipher
public void processAADByte(byte in)
AEADBlockCipher
processAADByte
in interface AEADBlockCipher
in
- the byte to be processed.public void processAADBytes(byte[] in, int inOff, int len)
AEADBlockCipher
processAADBytes
in interface AEADBlockCipher
in
- the input byte array.inOff
- the offset into the in array where the data to be processed starts.len
- the number of bytes to be processed.public int processByte(byte in, byte[] out, int outOff) throws DataLengthException, java.lang.IllegalStateException
AEADBlockCipher
processByte
in interface AEADBlockCipher
in
- the byte to be processed.out
- the output buffer the processed byte goes into.outOff
- the offset into the output byte array the processed data starts at.DataLengthException
- if the output buffer is too small.java.lang.IllegalStateException
public int processBytes(byte[] in, int inOff, int inLen, byte[] out, int outOff) throws DataLengthException, java.lang.IllegalStateException
AEADBlockCipher
processBytes
in interface AEADBlockCipher
in
- the input byte array.inOff
- the offset into the in array where the data to be processed starts.inLen
- the number of bytes to be processed.out
- the output buffer the processed bytes go into.outOff
- the offset into the output byte array the processed data starts at.DataLengthException
- if the output buffer is too small.java.lang.IllegalStateException
public int doFinal(byte[] out, int outOff) throws java.lang.IllegalStateException, InvalidCipherTextException
AEADBlockCipher
doFinal
in interface AEADBlockCipher
out
- space for any resulting output data.outOff
- offset into out to start copying the data at.java.lang.IllegalStateException
- if the cipher is in an inappropriate state.InvalidCipherTextException
- if the MAC fails to match.public void reset()
AEADBlockCipher
reset
in interface AEADBlockCipher
public byte[] getMac()
getMac
in interface AEADBlockCipher
public int getUpdateOutputSize(int len)
AEADBlockCipher
getUpdateOutputSize
in interface AEADBlockCipher
len
- the length of the input.public int getOutputSize(int len)
AEADBlockCipher
getOutputSize
in interface AEADBlockCipher
len
- the length of the input.public byte[] processPacket(byte[] in, int inOff, int inLen) throws java.lang.IllegalStateException, InvalidCipherTextException
in
- data for processing.inOff
- offset at which data starts in the input array.inLen
- length of the data in the input array.java.lang.IllegalStateException
- if the cipher is not appropriately set up.InvalidCipherTextException
- if the input data is truncated or the mac check fails.public int processPacket(byte[] in, int inOff, int inLen, byte[] output, int outOff) throws java.lang.IllegalStateException, InvalidCipherTextException, DataLengthException
in
- data for processing.inOff
- offset at which data starts in the input array.inLen
- length of the data in the input array.output
- output array.outOff
- offset into output array to start putting processed bytes.java.lang.IllegalStateException
- if the cipher is not appropriately set up.InvalidCipherTextException
- if the input data is truncated or the mac check fails.DataLengthException
- if output buffer too short.