|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.bouncycastle.crypto.modes.EAXBlockCipher
public class EAXBlockCipher
A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and Efficiency - by M. Bellare, P. Rogaway, D. Wagner. http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block cipher to encrypt and authenticate data. It's on-line (the length of a message isn't needed to begin processing it), has good performances, it's simple and provably secure (provided the underlying block cipher is secure). Of course, this implementations is NOT thread-safe.
| Field Summary | |
|---|---|
private byte[] |
associatedTextMac
|
private int |
blockSize
|
private byte[] |
bufBlock
|
private int |
bufOff
|
private SICBlockCipher |
cipher
|
private static byte |
cTAG
|
private boolean |
forEncryption
|
private static byte |
hTAG
|
private Mac |
mac
|
private byte[] |
macBlock
|
private int |
macSize
|
private byte[] |
nonceMac
|
private static byte |
nTAG
|
| Constructor Summary | |
|---|---|
EAXBlockCipher(BlockCipher cipher)
Constructor that accepts an instance of a block cipher engine. |
|
| Method Summary | |
|---|---|
private void |
calculateMac()
|
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. |
int |
getBlockSize()
|
byte[] |
getMac()
Return the value of the MAC associated with the last stream processed. |
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 cipher this object wraps. |
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. |
private int |
process(byte b,
byte[] out,
int outOff)
|
int |
processByte(byte in,
byte[] out,
int outOff)
encrypt/decrypt a single byte. |
int |
processBytes(byte[] in,
int inOff,
int len,
byte[] out,
int outOff)
process a block of bytes from in putting the result into out. |
void |
reset()
Reset the cipher. |
private boolean |
verifyMac(byte[] mac,
int off)
|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private static final byte nTAG
private static final byte hTAG
private static final byte cTAG
private SICBlockCipher cipher
private boolean forEncryption
private int blockSize
private Mac mac
private byte[] nonceMac
private byte[] associatedTextMac
private byte[] macBlock
private int macSize
private byte[] bufBlock
private int bufOff
| Constructor Detail |
|---|
public EAXBlockCipher(BlockCipher cipher)
cipher - the engine to use| Method Detail |
|---|
public java.lang.String getAlgorithmName()
AEADBlockCipher
getAlgorithmName in interface AEADBlockCipherpublic BlockCipher getUnderlyingCipher()
AEADBlockCipher
getUnderlyingCipher in interface AEADBlockCipherpublic int getBlockSize()
public void init(boolean forEncryption,
CipherParameters params)
throws java.lang.IllegalArgumentException
AEADBlockCipher
init in interface AEADBlockCipherforEncryption - 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.private void calculateMac()
public void reset()
AEADBlockCipher
reset in interface AEADBlockCipher
public int processByte(byte in,
byte[] out,
int outOff)
throws DataLengthException
AEADBlockCipher
processByte in interface AEADBlockCipherin - 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.
public int processBytes(byte[] in,
int inOff,
int len,
byte[] out,
int outOff)
throws DataLengthException
AEADBlockCipher
processBytes in interface AEADBlockCipherin - 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.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.
public int doFinal(byte[] out,
int outOff)
throws java.lang.IllegalStateException,
InvalidCipherTextException
AEADBlockCipher
doFinal in interface AEADBlockCipherout - 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 byte[] getMac()
AEADBlockCipher
getMac in interface AEADBlockCipherpublic int getUpdateOutputSize(int len)
AEADBlockCipher
getUpdateOutputSize in interface AEADBlockCipherlen - the length of the input.
public int getOutputSize(int len)
AEADBlockCipher
getOutputSize in interface AEADBlockCipherlen - the length of the input.
private int process(byte b,
byte[] out,
int outOff)
private boolean verifyMac(byte[] mac,
int off)
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||