Class LMSPrivateKeyParameters

    • Constructor Detail

      • LMSPrivateKeyParameters

        public LMSPrivateKeyParameters​(LMSigParameters lmsParameter,
                                       LMOtsParameters otsParameters,
                                       int q,
                                       byte[] I,
                                       int maxQ,
                                       byte[] masterSecret)
      • LMSPrivateKeyParameters

        protected LMSPrivateKeyParameters​(LMSigParameters lmsParameter,
                                          LMOtsParameters otsParameters,
                                          int maxQ)
        A key with no position, identifier or seed of its own - the placeholder an HSS hierarchy is built with for the levels below the root, each of which resetKeyToIndex replaces from the level above before the key is used. The sentinel values are deliberately ones the public constructor refuses, so a placeholder can never be mistaken for a key that was merely built carelessly; a subclass using this must not present the result as a usable key.
    • Method Detail

      • getInstance

        public static LMSPrivateKeyParameters getInstance​(byte[] privEnc,
                                                          byte[] pubEnc)
                                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • getInstance

        public static LMSPrivateKeyParameters getInstance​(java.lang.Object src)
                                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • getIndex

        public int getIndex()
        Return the key index (the q value).
        Returns:
        private key index number.
      • extractKeyShard

        public LMSPrivateKeyParameters extractKeyShard​(int usageCount)
        Return a key that can be used usageCount times.

        Note: this will use the range [index...index + usageCount) for the current key.

        Parameters:
        usageCount - the number of usages the key should have.
        Returns:
        a key based on the current key that can be used usageCount times.
      • getI

        public byte[] getI()
      • getMasterSecret

        public byte[] getMasterSecret()
      • destroy

        public void destroy()
        Destroy this key, zeroizing the master secret it holds.

        The key identifier I, the parameter sets, the index and the cached Merkle tree nodes are retained - none of them is secret, and the public key stays derivable where the tree's root is already cached. After destruction isDestroyed() returns true and getMasterSecret(), getEncoded(), generateLMSContext() and the derivation of child trees throw IllegalStateException; a signature attempt fails before its one-time index is claimed. Note: keys repositioned within this tree or split off it with extractKeyShard(int) share its master secret array, so destroying this key invalidates them too.

        Specified by:
        destroy in interface javax.security.auth.Destroyable
      • isDestroyed

        public boolean isDestroyed()
        Specified by:
        isDestroyed in interface javax.security.auth.Destroyable
      • getIndexLimit

        public int getIndexLimit()
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • getEncoded

        public byte[] getEncoded()
                          throws java.io.IOException
        Description copied from interface: Encodable
        Return a byte array representing the implementing object.
        Specified by:
        getEncoded in interface Encodable
        Specified by:
        getEncoded in class LMSKeyParameters
        Returns:
        a byte array representing the encoding.
        Throws:
        java.io.IOException - if an issue arises generation the encoding.