HMacpublic class HMac extends Object implements org.bouncycastle.crypto.MacHMAC implementation based on RFC2104
H(K XOR opad, H(K XOR ipad, text)) |
Fields Summary |
---|
private static final int | BLOCK_LENGTH | private static final byte | IPAD | private static final byte | OPAD | private org.bouncycastle.crypto.Digest | digest | private int | digestSize | private byte[] | inputPad | private byte[] | outputPad |
Methods Summary |
---|
public int | doFinal(byte[] out, int outOff)
byte[] tmp = new byte[digestSize];
digest.doFinal(tmp, 0);
digest.update(outputPad, 0, outputPad.length);
digest.update(tmp, 0, tmp.length);
int len = digest.doFinal(out, outOff);
reset();
return len;
| public java.lang.String | getAlgorithmName()
return digest.getAlgorithmName() + "/HMAC";
| public int | getMacSize()
return digestSize;
| public org.bouncycastle.crypto.Digest | getUnderlyingDigest()
return digest;
| public void | init(org.bouncycastle.crypto.CipherParameters params)
digest.reset();
byte[] key = ((KeyParameter)params).getKey();
if (key.length > BLOCK_LENGTH)
{
digest.update(key, 0, key.length);
digest.doFinal(inputPad, 0);
for (int i = digestSize; i < inputPad.length; i++)
{
inputPad[i] = 0;
}
}
else
{
System.arraycopy(key, 0, inputPad, 0, key.length);
for (int i = key.length; i < inputPad.length; i++)
{
inputPad[i] = 0;
}
}
outputPad = new byte[inputPad.length];
System.arraycopy(inputPad, 0, outputPad, 0, inputPad.length);
for (int i = 0; i < inputPad.length; i++)
{
inputPad[i] ^= IPAD;
}
for (int i = 0; i < outputPad.length; i++)
{
outputPad[i] ^= OPAD;
}
digest.update(inputPad, 0, inputPad.length);
| public void | reset()Reset the mac generator.
/*
* reset the underlying digest.
*/
digest.reset();
/*
* reinitialize the digest.
*/
digest.update(inputPad, 0, inputPad.length);
| public void | update(byte in)
digest.update(in);
| public void | update(byte[] in, int inOff, int len)
digest.update(in, inOff, len);
|
|