Package org.bouncycastle.crypto.engines
Class Grain128AEADEngine
java.lang.Object
org.bouncycastle.crypto.engines.Grain128AEADEngine
- All Implemented Interfaces:
AEADCipher
Grain-128 AEAD, based on the current round 3 submission, https://grain-128aead.github.io/
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intprotected org.bouncycastle.crypto.engines.AEADBaseEngine.AADOperatorprotected Stringprotected intprotected org.bouncycastle.crypto.engines.AEADBaseEngine.DataOperatorprotected booleanprotected byte[]protected intprotected intprotected byte[]protected intprotected byte[]protected intprotected intprotected org.bouncycastle.crypto.engines.AEADBaseEngine.Stateprotected byte[]protected intprotected org.bouncycastle.crypto.engines.AEADBaseEngine.AADProcessingBuffer -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidcheckAAD()protected booleancheckData(boolean isDoFinal) intdoFinal(byte[] output, int outOff) Finish the operation either appending or verifying the MAC at the end of the data.protected final voidprotected final voidensureSufficientInputBuffer(byte[] input, int inOff, int len) protected final voidensureSufficientOutputBuffer(byte[] output, int outOff, int len) protected voidfinishAAD(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState, boolean isDoFinal) protected voidfinishAAD1(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState) protected voidfinishAAD2(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState) protected voidfinishAAD3(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState, boolean isDoFinal) Return the name of the algorithm.final intintintbyte[]getMac()Return the value of the MAC associated with the last stream processed.intgetOutputSize(int len) return the size of the output buffer required for a processBytes plus a doFinal with an input of len bytes.protected intgetTotalBytesForUpdate(int len) intgetUpdateOutputSize(int len) return the size of the output buffer required for a processBytes an input of len bytes.voidinit(boolean forEncryption, CipherParameters params) initialise the underlying cipher.protected voidinit(byte[] key, byte[] iv) Initialize a Grain-128AEAD cipher.voidprocessAADByte(byte input) Add a single byte to the associated data check.voidprocessAADBytes(byte[] input, int inOff, int len) Add a sequence of bytes to the associated data check.protected voidprocessBufferAAD(byte[] input, int inOff) protected voidprocessBufferDecrypt(byte[] input, int inOff, byte[] output, int outOff) protected voidprocessBufferEncrypt(byte[] input, int inOff, byte[] output, int outOff) intprocessByte(byte in, byte[] out, int outOff) encrypt/decrypt a single byte.intprocessBytes(byte[] input, int inOff, int len, byte[] output, int outOff) process a block of bytes from in putting the result into out.protected intprocessEncDecByte(byte[] output, int outOff) protected intprocessEncDecBytes(byte[] input, int inOff, int len, byte[] output, int outOff) protected voidprotected voidprocessFinalBlock(byte[] output, int outOff) voidreset()Reset the cipher.protected voidreset(boolean clearMac) protected voidsetInnerMembers(org.bouncycastle.crypto.engines.AEADBaseEngine.ProcessingBufferType type, org.bouncycastle.crypto.engines.AEADBaseEngine.AADOperatorType aadOperatorType, org.bouncycastle.crypto.engines.AEADBaseEngine.DataOperatorType dataOperatorType) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.bouncycastle.crypto.modes.AEADCipher
doFinal, getAlgorithmName, getMac, getOutputSize, init, processAADByte, processAADBytes, processByte, processBytes, reset
-
Field Details
-
forEncryption
protected boolean forEncryption -
algorithmName
-
KEY_SIZE
protected int KEY_SIZE -
IV_SIZE
protected int IV_SIZE -
MAC_SIZE
protected int MAC_SIZE -
initialAssociatedText
protected byte[] initialAssociatedText -
mac
protected byte[] mac -
m_buf
protected byte[] m_buf -
m_aad
protected byte[] m_aad -
m_bufPos
protected int m_bufPos -
m_aadPos
protected int m_aadPos -
AADBufferSize
protected int AADBufferSize -
BlockSize
protected int BlockSize -
m_state
protected org.bouncycastle.crypto.engines.AEADBaseEngine.State m_state -
m_bufferSizeDecrypt
protected int m_bufferSizeDecrypt -
processor
protected org.bouncycastle.crypto.engines.AEADBaseEngine.AADProcessingBuffer processor -
aadOperator
protected org.bouncycastle.crypto.engines.AEADBaseEngine.AADOperator aadOperator -
dataOperator
protected org.bouncycastle.crypto.engines.AEADBaseEngine.DataOperator dataOperator
-
-
Constructor Details
-
Grain128AEADEngine
public Grain128AEADEngine()
-
-
Method Details
-
init
Initialize a Grain-128AEAD cipher.- Throws:
IllegalArgumentException
-
reset
protected void reset(boolean clearMac) -
getUpdateOutputSize
public int getUpdateOutputSize(int len) Description copied from interface:AEADCipherreturn the size of the output buffer required for a processBytes an input of len bytes.The returned size may be dependent on the initialisation of this cipher and may not be accurate once subsequent input data is processed - this method should be invoked immediately prior to input data being processed.
- Specified by:
getUpdateOutputSizein interfaceAEADCipher- Parameters:
len- the length of the input.- Returns:
- the space required to accommodate a call to processBytes with len bytes of input.
-
finishAAD
protected void finishAAD(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState, boolean isDoFinal) -
processFinalBlock
protected void processFinalBlock(byte[] output, int outOff) -
processBufferAAD
protected void processBufferAAD(byte[] input, int inOff) -
processFinalAAD
protected void processFinalAAD() -
processBufferEncrypt
protected void processBufferEncrypt(byte[] input, int inOff, byte[] output, int outOff) -
processBufferDecrypt
protected void processBufferDecrypt(byte[] input, int inOff, byte[] output, int outOff) -
getAlgorithmName
Description copied from interface:AEADCipherReturn the name of the algorithm.- Specified by:
getAlgorithmNamein interfaceAEADCipher- Returns:
- the algorithm name.
-
getKeyBytesSize
public int getKeyBytesSize() -
getIVBytesSize
public int getIVBytesSize() -
getMac
public byte[] getMac()Description copied from interface:AEADCipherReturn the value of the MAC associated with the last stream processed.- Specified by:
getMacin interfaceAEADCipher- Returns:
- MAC for plaintext data.
-
init
Description copied from interface:AEADCipherinitialise the underlying cipher. Parameter can either be an AEADParameters or a ParametersWithIV object.- Specified by:
initin interfaceAEADCipher- Parameters:
forEncryption- true if we are setting up for encryption, false otherwise.params- the necessary parameters for the underlying cipher to be initialised.
-
reset
public void reset()Description copied from interface:AEADCipherReset the cipher. After resetting the cipher is in the same state as it was after the last init (if there was one).- Specified by:
resetin interfaceAEADCipher
-
setInnerMembers
protected void setInnerMembers(org.bouncycastle.crypto.engines.AEADBaseEngine.ProcessingBufferType type, org.bouncycastle.crypto.engines.AEADBaseEngine.AADOperatorType aadOperatorType, org.bouncycastle.crypto.engines.AEADBaseEngine.DataOperatorType dataOperatorType) -
processAADByte
public void processAADByte(byte input) Description copied from interface:AEADCipherAdd a single byte to the associated data check.
If the implementation supports it, this will be an online operation and will not retain the associated data.- Specified by:
processAADBytein interfaceAEADCipher- Parameters:
input- the byte to be processed.
-
processAADBytes
public void processAADBytes(byte[] input, int inOff, int len) Description copied from interface:AEADCipherAdd a sequence of bytes to the associated data check.
If the implementation supports it, this will be an online operation and will not retain the associated data.- Specified by:
processAADBytesin interfaceAEADCipher- Parameters:
input- 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.
-
processByte
Description copied from interface:AEADCipherencrypt/decrypt a single byte.- Specified by:
processBytein interfaceAEADCipher- Parameters:
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.- Returns:
- the number of bytes written to out.
- Throws:
DataLengthException- if the output buffer is too small.
-
processEncDecByte
protected int processEncDecByte(byte[] output, int outOff) -
processBytes
public int processBytes(byte[] input, int inOff, int len, byte[] output, int outOff) throws DataLengthException Description copied from interface:AEADCipherprocess a block of bytes from in putting the result into out.- Specified by:
processBytesin interfaceAEADCipher- Parameters:
input- 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.output- the output buffer the processed bytes go into.outOff- the offset into the output byte array the processed data starts at.- Returns:
- the number of bytes written to out.
- Throws:
DataLengthException- if the output buffer is too small.
-
processEncDecBytes
protected int processEncDecBytes(byte[] input, int inOff, int len, byte[] output, int outOff) -
doFinal
public int doFinal(byte[] output, int outOff) throws IllegalStateException, InvalidCipherTextException Description copied from interface:AEADCipherFinish the operation either appending or verifying the MAC at the end of the data.- Specified by:
doFinalin interfaceAEADCipher- Parameters:
output- space for any resulting output data.outOff- offset into out to start copying the data at.- Returns:
- number of bytes written into out.
- Throws:
IllegalStateException- if the cipher is in an inappropriate state.InvalidCipherTextException- if the MAC fails to match.
-
getBlockSize
public final int getBlockSize() -
getTotalBytesForUpdate
protected int getTotalBytesForUpdate(int len) -
getOutputSize
public int getOutputSize(int len) Description copied from interface:AEADCipherreturn the size of the output buffer required for a processBytes plus a doFinal with an input of len bytes.The returned size may be dependent on the initialisation of this cipher and may not be accurate once subsequent input data is processed - this method should be invoked immediately prior to a call to final processing of input data and a call to
AEADCipher.doFinal(byte[], int).- Specified by:
getOutputSizein interfaceAEADCipher- Parameters:
len- the length of the input.- Returns:
- the space required to accommodate a call to processBytes and doFinal with len bytes of input.
-
checkAAD
protected void checkAAD() -
checkData
protected boolean checkData(boolean isDoFinal) -
ensureSufficientOutputBuffer
protected final void ensureSufficientOutputBuffer(byte[] output, int outOff, int len) -
ensureSufficientInputBuffer
protected final void ensureSufficientInputBuffer(byte[] input, int inOff, int len) -
ensureInitialized
protected final void ensureInitialized() -
finishAAD1
protected void finishAAD1(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState) -
finishAAD2
protected void finishAAD2(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState) -
finishAAD3
protected void finishAAD3(org.bouncycastle.crypto.engines.AEADBaseEngine.State nextState, boolean isDoFinal)
-