Class HMAC256Generator

java.lang.Object
net.i2p.crypto.HMACGenerator
net.i2p.crypto.HMAC256Generator

public final class HMAC256Generator extends HMACGenerator
Calculate the HMAC-SHA256 of a key+message. This is compatible with javax.crypto.Mac.getInstance("HmacSHA256"). As of 0.9.12, uses javax.crypto.Mac. Warning - used by Syndie, don't break it.
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    (package private) static final class 
    Like SecretKeySpec but doesn't copy the key in the construtor, for speed.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    (package private) Mac
    Package private for HKDF.
    void
    calculate(byte[] key, byte[] data, int offset, int length, byte[] target, int targetOffset)
    Calculate the HMAC of the data with the given key.
    void
    calculate(SessionKey key, byte[] data, int offset, int length, byte[] target, int targetOffset)
    Calculate the HMAC of the data with the given key.
    (package private) void
    release(Mac mac)
    Mac will be reset and initialized with a zero 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 net.i2p.crypto.HMACGenerator

    acquireTmp, releaseTmp

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • HMAC256Generator

      public HMAC256Generator(I2PAppContext context)
      Parameters:
      context - unused
  • Method Details

    • 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. Outputs 32 bytes to target starting at targetOffset.
      Specified by:
      calculate in class HMACGenerator
      Parameters:
      target - out parameter the first 16 bytes contain the HMAC, the last 16 bytes are zero
      targetOffset - offset into target to put the hmac
      Throws:
      UnsupportedOperationException - if the JVM does not support it
      IllegalArgumentException - for bad key or target too small
      Since:
      0.9.12 overrides HMACGenerator
    • calculate

      public void calculate(byte[] key, byte[] data, int offset, int length, byte[] target, int targetOffset)
      Calculate the HMAC of the data with the given key. Outputs 32 bytes to target starting at targetOffset.
      Parameters:
      key - first 32 bytes used as the key
      Throws:
      UnsupportedOperationException - if the JVM does not support it
      IllegalArgumentException - for bad key or target too small
      Since:
      0.9.38
    • 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.
      Specified by:
      verify in class HMACGenerator
      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, use 32 for HMAC256
      Since:
      0.9.12 overrides HMACGenerator
    • acquire

      Mac acquire()
      Package private for HKDF.
      Returns:
      cached or Mac.getInstance("HmacSHA256")
      Since:
      0.9.48
    • release

      void release(Mac mac)
      Mac will be reset and initialized with a zero key. Package private for HKDF.
      Since:
      0.9.48