net.i2p.crypto
Class HMACGenerator

java.lang.Object
  extended by 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 in I2PHMac and MD5Digest. 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
protected  LinkedBlockingQueue<I2PHMac> _available
          set of available HMAC instances for calculate
 
Constructor Summary
HMACGenerator(I2PAppContext context)
           
 
Method Summary
protected  I2PHMac acquire()
           
 Hash calculate(SessionKey key, byte[] data)
          Deprecated. unused
 void calculate(SessionKey key, byte[] data, int offset, int length, byte[] target, int targetOffset)
          Calculate the HMAC of the data with the given key
 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

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

public Hash calculate(SessionKey key,
                      byte[] data)
Deprecated. unused

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


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 with
curData - MAC to verify
curOffset - index into curData to MAC
curLength - how much data in curData do we want to run the HMAC over
origMAC - what do we expect the MAC of curData to equal
origMACOffset - index into origMAC
origMACLength - how much of the MAC do we want to verify

acquire

protected I2PHMac acquire()