Class RatchetTagSet

java.lang.Object
net.i2p.router.crypto.ratchet.RatchetTagSet
All Implemented Interfaces:
TagSetHandle
Direct Known Subclasses:
SingleTagSet

class RatchetTagSet extends Object implements TagSetHandle
A tagset class for one direction, either inbound or outbound. For outbound, uses very little memory. Tags and keys are generated on demand. See proposal 144. For inbound, generates the tags in advance, maintaining minSize lookahead. Keys are generated as required. Caller must synch on all methods.
Since:
0.9.44
  • Field Details

  • Constructor Details

    • RatchetTagSet

      public RatchetTagSet(HKDF hkdf, HandshakeState state, SessionKey rootKey, SessionKey data, long date)
      Outbound NSR Tagset
      Parameters:
      date - For outbound: creation time
    • RatchetTagSet

      public RatchetTagSet(HKDF hkdf, SessionKey rootKey, SessionKey data, long date, int tagsetid, int keyid)
      Outbound ES Tagset
      Parameters:
      date - For outbound: creation time
    • RatchetTagSet

      public RatchetTagSet(HKDF hkdf, SessionTagListener lsnr, HandshakeState state, SessionKey rootKey, SessionKey data, long date, int minSize, int maxSize)
      Inbound NSR Tagset
      Parameters:
      date - For inbound: creation time
    • RatchetTagSet

      public RatchetTagSet(HKDF hkdf, SessionTagListener lsnr, PublicKey remoteKey, SessionKey rootKey, SessionKey data, long date, int tagsetid, int keyid, int minSize, int maxSize)
      Inbound ES Tagset
      Parameters:
      date - For inbound: creation time
    • RatchetTagSet

      protected RatchetTagSet(SessionTagListener lsnr, SessionKey rootKey, long date, long timeout)
      For SingleTagSet
      Since:
      0.9.46
  • Method Details

    • clear

      public void clear()
    • getRemoteKey

      public PublicKey getRemoteKey()
      The far-end's public key. Valid for NSR and inbound ES tagsets. Returns null for outbound ES tagsets.
    • getAssociatedKey

      public SessionKey getAssociatedKey()
      The root key for the tag set. Used to match the OB and IB ES tagset 0, where both will have the same root key. Not used for cryptographic operations after setup.
    • getHandshakeState

      public HandshakeState getHandshakeState()
      For inbound/outbound NSR only, else null. MUST be cloned before processing NSR.
    • getDate

      public long getDate()
      For inbound and outbound: last used time Expiration is getDate() + getTimeout().
    • setDate

      public void setDate(long when)
      For inbound and outbound: last used time
    • getCreated

      public long getCreated()
      For inbound and outbound: creation time, for debugging only
    • getTimeout

      public long getTimeout()
      For inbound and outbound: Idle timeout interval. Expiration is getDate() + getTimeout().
      Since:
      0.9.46
    • getExpiration

      public long getExpiration()
      For inbound and outbound: Expiration. Expiration is getDate() + getTimeout() if acked. May be shorter if not acked.
      Since:
      0.9.46
    • size

      public int size()
      unused tags generated
      Returns:
      0 for outbound
    • remaining

      public int remaining()
      tags remaining
      Returns:
      0 - 65536
    • getNextKey

      public NextSessionKey getNextKey()
      Next Forward Key if applicable (outbound ES and we're running low). Null if NSR or inbound or remaining is sufficient. Once non-null, will be constant for the remaining life of the tagset.
      Returns:
      key or null
      Since:
      0.9.46
    • getNextKeys

      public KeyPair getNextKeys()
      Next Forward KeyPair if applicable (we're running low). Null if remaining is sufficient. Once non-null, will be constant for the remaining life of the tagset.
      Returns:
      keys or null
      Since:
      0.9.46
    • getNextRootKey

      public SessionKey getNextRootKey()
      Root key for the next DH ratchet. Should only be needed for ES, but valid for NSR also.
      Returns:
      key
      Since:
      0.9.46
    • consume

      public SessionKeyAndNonce consume(RatchetSessionTag tag)
      inbound only
      Returns:
      associated SessionKey or null if not found.
    • consumeNext

      public RatchetSessionTag consumeNext()
      Public for outbound only. Used internally for inbound. Call before consumeNextKey();
      Returns:
      a tag or null if we ran out
    • consumeNextKey

      public SessionKeyAndNonce consumeNextKey()
      For outbound, call after consumeNextTag(). Also called by consume() to catch up for inbound.
      Returns:
      a key and nonce, non-null
    • getAcked

      public boolean getAcked()
      For inbound, returns true after first consume() call. For outbound, returns true after first consumeNextKey() call.
    • getID

      public int getID()
      The TagSet ID, starting at 0. After that = 1 + my key id + his key id
    • getDebugID

      public int getDebugID()
      A unique ID for debugging only
    • toString

      public String toString()
      Overrides:
      toString in class Object