|
Bouncy Castle Cryptography Library 1.85 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.bouncycastle.crypto.macs.DSTU7624Mac
Implementation of DSTU7624 MAC mode.
This is a CBC-MAC variant (a CBC chain whose final block is masked with kDelta = E(0) before the
last encryption) and, like raw CBC-MAC, it is defined only for input that is a whole number of
blocks: doFinal(byte[], int) rejects a trailing partial block with "input must be a multiple of
blocksize". The restriction is deliberate and is not relaxed by zero-padding the final
block. The MAC binds no message length, so zero-padding a partial block would make the tag of an
N-byte message collide with that of a longer message sharing the same final block once padded
(the documented ambiguity of ISO/IEC 9797-1 padding method 1). DSTU 7624:2014 specifies no
partial-block padding for this MAC and publishes no vector for one, so any padding scheme BC chose
(zero-pad, or the unambiguous 10* / ISO 9797-1 method 2 that CMAC uses) would be non-conformant
and non-interoperable. Callers needing to authenticate arbitrary-length input should pad to a
block boundary with an agreed scheme before calling update, or use a length-binding MAC such as
KGMac. See github #287.
| Constructor Summary | |
DSTU7624Mac(int blockBitLength,
int q)
|
|
| Method Summary | |
int |
doFinal(byte[] out,
int outOff)
Compute the final stage of the MAC writing the output to the out parameter. |
java.lang.String |
getAlgorithmName()
Return the name of the algorithm the MAC implements. |
int |
getMacSize()
Return the block size for this MAC (in bytes). |
void |
init(CipherParameters params)
Initialise the MAC. |
void |
reset()
Reset the MAC. |
void |
update(byte in)
add a single byte to the mac for processing. |
void |
update(byte[] in,
int inOff,
int len)
|
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
public DSTU7624Mac(int blockBitLength,
int q)
| Method Detail |
public void init(CipherParameters params)
throws java.lang.IllegalArgumentException
Mac
init in interface Macparams - the key and other data required by the MAC.
java.lang.IllegalArgumentException - if the params argument is
inappropriate.public java.lang.String getAlgorithmName()
Mac
getAlgorithmName in interface Macpublic int getMacSize()
Mac
getMacSize in interface Macpublic void update(byte in)
Mac
update in interface Macin - the byte to be processed.
public void update(byte[] in,
int inOff,
int len)
update in interface Macin - the array containing the input.inOff - the index in the array the data begins at.len - the length of the input starting at inOff.
public int doFinal(byte[] out,
int outOff)
throws DataLengthException,
java.lang.IllegalStateException
MacdoFinal leaves the MAC in the same state it was after the last init.
doFinal in interface Macout - the array the MAC is to be output to.outOff - the offset into the out buffer the output is to start at.
java.lang.IllegalStateException - if the MAC is not initialised.
DataLengthException - if there isn't enough space in out.public void reset()
Mac
reset in interface Mac
|
Bouncy Castle Cryptography Library 1.85 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||