Class XMSSSignatureSpi

    • Constructor Detail

      • XMSSSignatureSpi

        protected XMSSSignatureSpi​(java.lang.String algorithm)
      • XMSSSignatureSpi

        protected XMSSSignatureSpi​(java.lang.String sigName,
                                   Digest digest,
                                   XMSSSigner signer)
    • Method Detail

      • engineInitVerify

        protected void engineInitVerify​(java.security.PublicKey publicKey)
                                 throws java.security.InvalidKeyException
        Specified by:
        engineInitVerify in class java.security.SignatureSpi
        Throws:
        java.security.InvalidKeyException
      • engineInitSign

        protected void engineInitSign​(java.security.PrivateKey privateKey,
                                      java.security.SecureRandom random)
                               throws java.security.InvalidKeyException
        Overrides:
        engineInitSign in class java.security.SignatureSpi
        Throws:
        java.security.InvalidKeyException
      • engineInitSign

        protected void engineInitSign​(java.security.PrivateKey privateKey)
                               throws java.security.InvalidKeyException
        Specified by:
        engineInitSign in class java.security.SignatureSpi
        Throws:
        java.security.InvalidKeyException
      • engineUpdate

        protected void engineUpdate​(byte b)
                             throws java.security.SignatureException
        Specified by:
        engineUpdate in class java.security.SignatureSpi
        Throws:
        java.security.SignatureException
      • engineUpdate

        protected void engineUpdate​(byte[] b,
                                    int off,
                                    int len)
                             throws java.security.SignatureException
        Specified by:
        engineUpdate in class java.security.SignatureSpi
        Throws:
        java.security.SignatureException
      • engineSign

        protected byte[] engineSign()
                             throws java.security.SignatureException
        Specified by:
        engineSign in class java.security.SignatureSpi
        Throws:
        java.security.SignatureException
      • engineVerify

        protected boolean engineVerify​(byte[] sigBytes)
                                throws java.security.SignatureException
        Specified by:
        engineVerify in class java.security.SignatureSpi
        Throws:
        java.security.SignatureException
      • engineSetParameter

        protected void engineSetParameter​(java.security.spec.AlgorithmParameterSpec params)
        Overrides:
        engineSetParameter in class java.security.SignatureSpi
      • engineSetParameter

        protected void engineSetParameter​(java.lang.String param,
                                          java.lang.Object value)
        Deprecated.
        replaced with #engineSetParameter(java.security.spec.AlgorithmParameterSpec)
        Specified by:
        engineSetParameter in class java.security.SignatureSpi
      • engineGetParameter

        protected java.lang.Object engineGetParameter​(java.lang.String param)
        Deprecated.
        Specified by:
        engineGetParameter in class java.security.SignatureSpi
      • isSigningCapable

        public boolean isSigningCapable()
        Description copied from interface: StateAwareSignature
        Return true if this Signature object can be used for signing. False otherwise.
        Specified by:
        isSigningCapable in interface StateAwareSignature
        Returns:
        true if we are capable of making signatures.
      • getUpdatedPrivateKey

        public java.security.PrivateKey getUpdatedPrivateKey()
        Description copied from interface: StateAwareSignature
        Return the current version of the private key with the updated state.

        Note: what this leaves behind depends on whether a signature has been generated since initSign(). After one, the key handed back is the key that signature spent and the Signature object keeps nothing: it cannot generate another signature without a further call to initSign(), and a second call to this method throws. Before one, the object keeps a single usage to sign with and hands back the rest, so it remains capable of exactly one signature - that is the whole point of collecting first, since the state a caller is obliged to persist is then durable before the one-time key covering it is spent. A second call in that state hands back the same key again rather than a further shard.

        Collecting first and then signing joins the two: the signature spends the one usage the object kept, and a collection after it throws rather than handing that spent shard over. Everything the caller has to store it was given by the first collection, and the shard adds nothing to it - so a caller that collects in a finally beside an explicit collection is refused instead of overwriting the remainder with a key reporting nothing remaining.

        The key that comes back may report no usages remaining - a Signature object initialised on a spent key still has state its caller has to store - so a non-null return is not on its own a statement that anything is left to sign with. StateAwareSignature.isSigningCapable() is what answers that, and the two do differ in that case.

        Specified by:
        getUpdatedPrivateKey in interface StateAwareSignature
        Returns:
        an updated private key object, which can be used for later signature generation.