Class 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
    • Constructor Detail

      • RatchetTagSet

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

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

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

      • 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 identifier for the session. 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().
        Since:
        0.9.46
      • getOriginalSize

        public int getOriginalSize()
        for debugging
      • size

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

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

        public NextSessionKey getNextKey()
        Next Forward Key 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:
        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
      • 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
      • setAcked

        public void setAcked()
        For outbound only, call when we can use it.
      • getAcked

        public boolean getAcked()
        For inbound, returns true after first consume() call. For outbound, returns true after set.
      • 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