Package net.i2p.crypto
Class HMACGenerator
- java.lang.Object
-
- net.i2p.crypto.HMACGenerator
-
- Direct Known Subclasses:
HMAC256Generator
public class HMACGenerator extends Object
Calculate the HMAC-MD5-128 of a key+message. All the good stuff occurs inI2PHMac
Keys are always 32 bytes. This is used only by UDP. Use deprecated outside the router, this may move to router.jar. NOTE THIS IS NOT COMPATIBLE with javax.crypto.Mac.getInstance("HmacMD5") as we tell I2PHMac that the digest length is 32 bytes, so it generates a different result. Quote jrandom: "The HMAC is hardcoded to use SHA256 digest size for backwards compatability. next time we have a backwards incompatible change, we should update this." Does this mean he intended it to be compatible with MD5? See also 2005-07-05 status notes.
-
-
Field Summary
Fields Modifier and Type Field Description protected LinkedBlockingQueue<I2PHMac>
_available
set of available HMAC instances for calculate
-
Constructor Summary
Constructors Constructor Description HMACGenerator(I2PAppContext context)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected I2PHMac
acquire()
protected byte[]
acquireTmp()
32 bytes from the byte array cache.Hash
calculate(SessionKey key, byte[] data)
Deprecated.unused (not even by Syndie)void
calculate(SessionKey key, byte[] data, int offset, int length, byte[] target, int targetOffset)
Calculate the HMAC of the data with the given keyprotected void
releaseTmp(byte[] tmp)
boolean
verify(SessionKey key, byte[] curData, int curOffset, int curLength, byte[] origMAC, int origMACOffset, int origMACLength)
Verify the MAC inline, reducing some unnecessary memory churn.
-
-
-
Field Detail
-
_available
protected final LinkedBlockingQueue<I2PHMac> _available
set of available HMAC instances for calculate
-
-
Constructor Detail
-
HMACGenerator
public HMACGenerator(I2PAppContext context)
- Parameters:
context
- unused
-
-
Method Detail
-
calculate
@Deprecated public Hash calculate(SessionKey key, byte[] data)
Deprecated.unused (not even by Syndie)Calculate the HMAC of the data with the given key- Returns:
- the first 16 bytes contain the HMAC, the last 16 bytes are zero
-
calculate
public void calculate(SessionKey key, byte[] data, int offset, int length, byte[] target, int targetOffset)
Calculate the HMAC of the data with the given key- Parameters:
target
- out parameter the first 16 bytes contain the HMAC, the last 16 bytes are zerotargetOffset
- offset into target to put the hmac- Throws:
IllegalArgumentException
- for bad key or target too small
-
verify
public boolean verify(SessionKey key, byte[] curData, int curOffset, int curLength, byte[] origMAC, int origMACOffset, int origMACLength)
Verify the MAC inline, reducing some unnecessary memory churn.- Parameters:
key
- session key to verify the MAC withcurData
- MAC to verifycurOffset
- index into curData to MACcurLength
- how much data in curData do we want to run the HMAC overorigMAC
- what do we expect the MAC of curData to equalorigMACOffset
- index into origMACorigMACLength
- how much of the MAC do we want to verify- Throws:
IllegalArgumentException
- for bad key
-
acquire
protected I2PHMac acquire()
-
acquireTmp
protected byte[] acquireTmp()
32 bytes from the byte array cache. Does NOT zero.
-
releaseTmp
protected void releaseTmp(byte[] tmp)
-
-