Class Treehash

java.lang.Object
org.bouncycastle.pqc.legacy.crypto.gmss.Treehash

public class Treehash extends Object
This class implements a treehash instance for the Merkle tree traversal algorithm. The first node of the stack is stored in this instance itself, additional tail nodes are stored on a tailstack.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Treehash(Vector tailStack, int maxHeight, Digest digest)
    Constructor
    Treehash(Digest name, byte[][] statByte, int[] statInt)
    This constructor regenerates a prior treehash object
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Destroys a treehash instance after the top node was taken for authentication path.
    byte[]
    returns the first node stored in treehash instance itself
    int
    Returns the top node height
    int
    Returns the height of the lowest node stored either in treehash or on the stack.
    byte[]
    returns the active seed
    byte[][]
    Returns the status byte array used by the GMSSPrivateKeyASN.1 class
    int[]
    Returns the status int array used by the GMSSPrivateKeyASN.1 class
    Returns the tailstack
    void
    initializes the treehash instance.
    void
    initializeSeed(byte[] seedIn)
    Method to initialize the seeds needed for the precomputation of right nodes.
    void
    setFirstNode(byte[] hash)
    This method sets the first node stored in the treehash instance itself
    returns a String representation of the treehash instance
    void
    update(GMSSRandom gmssRandom, byte[] leaf)
    Calculates one update of the treehash instance, i.e.
    void
    updates the nextSeed of this treehash instance one step needed for the schedulng of the seeds
    boolean
    Method to check whether the instance has been finished or not
    boolean
    Method to check whether the instance has been initialized or not

    Methods inherited from class java.lang.Object

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

    • Treehash

      public Treehash(Digest name, byte[][] statByte, int[] statInt)
      This constructor regenerates a prior treehash object
      Parameters:
      name - an array of strings, containing the name of the used hash function and PRNG and the name of the corresponding provider
      statByte - status bytes
      statInt - status ints
    • Treehash

      public Treehash(Vector tailStack, int maxHeight, Digest digest)
      Constructor
      Parameters:
      tailStack - a vector element where the stack nodes are stored
      maxHeight - maximal height of the treehash instance
      digest - an array of strings, containing the name of the used hash function and PRNG and the name of the corresponding provider
  • Method Details

    • initializeSeed

      public void initializeSeed(byte[] seedIn)
      Method to initialize the seeds needed for the precomputation of right nodes. Should be initialized with index 3*2^i for treehash_i
      Parameters:
      seedIn -
    • initialize

      public void initialize()
      initializes the treehash instance. The seeds must already have been initialized to work correctly.
    • update

      public void update(GMSSRandom gmssRandom, byte[] leaf)
      Calculates one update of the treehash instance, i.e. creates a new leaf and hashes if possible
      Parameters:
      gmssRandom - an instance of the PRNG
      leaf - The byte value of the leaf needed for the update
    • destroy

      public void destroy()
      Destroys a treehash instance after the top node was taken for authentication path.
    • getLowestNodeHeight

      public int getLowestNodeHeight()
      Returns the height of the lowest node stored either in treehash or on the stack. It must not be set to infinity (as mentioned in the paper) because this cases are considered in the computeAuthPaths method of JDKGMSSPrivateKey
      Returns:
      Height of the lowest node
    • getFirstNodeHeight

      public int getFirstNodeHeight()
      Returns the top node height
      Returns:
      Height of the first node, the top node
    • wasInitialized

      public boolean wasInitialized()
      Method to check whether the instance has been initialized or not
      Returns:
      true if treehash was already initialized
    • wasFinished

      public boolean wasFinished()
      Method to check whether the instance has been finished or not
      Returns:
      true if treehash has reached its maximum height
    • getFirstNode

      public byte[] getFirstNode()
      returns the first node stored in treehash instance itself
      Returns:
      the first node stored in treehash instance itself
    • getSeedActive

      public byte[] getSeedActive()
      returns the active seed
      Returns:
      the active seed
    • setFirstNode

      public void setFirstNode(byte[] hash)
      This method sets the first node stored in the treehash instance itself
      Parameters:
      hash -
    • updateNextSeed

      public void updateNextSeed(GMSSRandom gmssRandom)
      updates the nextSeed of this treehash instance one step needed for the schedulng of the seeds
      Parameters:
      gmssRandom - the prng used for the seeds
    • getTailStack

      public Vector getTailStack()
      Returns the tailstack
      Returns:
      the tailstack
    • getStatByte

      public byte[][] getStatByte()
      Returns the status byte array used by the GMSSPrivateKeyASN.1 class
      Returns:
      The status bytes
    • getStatInt

      public int[] getStatInt()
      Returns the status int array used by the GMSSPrivateKeyASN.1 class
      Returns:
      The status ints
    • toString

      public String toString()
      returns a String representation of the treehash instance
      Overrides:
      toString in class Object