Class SHA1InterleaveDigest

  • All Implemented Interfaces:
    Digest, Memoable

    public class SHA1InterleaveDigest
    extends java.lang.Object
    implements Digest, Memoable
    Implementation of the SHA_Interleave function from RFC 2945, section 3.1, as used by SRP-SHA1 to produce a session key twice the length of a regular SHA-1 hash.

    The complete input is buffered until doFinal(byte[], int) is called: leading zero bytes are removed, a further leading byte is removed if the remaining length is odd, the even-numbered and odd-numbered bytes are then hashed separately with SHA-1, and the two hashes are interleaved to form the 40 byte result.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      Memoable copy()
      Produce a copy of this object with its configuration and in its current state.
      int doFinal​(byte[] out, int outOff)
      close the digest, producing the final digest value.
      java.lang.String getAlgorithmName()
      return the algorithm name
      int getDigestSize()
      return the size, in bytes, of the digest produced by this message digest.
      void reset()
      reset the digest back to it's initial state.
      void reset​(Memoable other)
      Restore a copied object state into this object.
      void update​(byte in)
      update the message digest with a single byte.
      void update​(byte[] in, int inOff, int len)
      update the message digest with a block of bytes.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SHA1InterleaveDigest

        public SHA1InterleaveDigest()
      • SHA1InterleaveDigest

        public SHA1InterleaveDigest​(SHA1InterleaveDigest t)
        Copy constructor. This will copy the state of the provided message digest.
    • Method Detail

      • getAlgorithmName

        public java.lang.String getAlgorithmName()
        Description copied from interface: Digest
        return the algorithm name
        Specified by:
        getAlgorithmName in interface Digest
        Returns:
        the algorithm name
      • getDigestSize

        public int getDigestSize()
        Description copied from interface: Digest
        return the size, in bytes, of the digest produced by this message digest.
        Specified by:
        getDigestSize in interface Digest
        Returns:
        the size, in bytes, of the digest produced by this message digest.
      • update

        public void update​(byte in)
        Description copied from interface: Digest
        update the message digest with a single byte.
        Specified by:
        update in interface Digest
        Parameters:
        in - the input byte to be entered.
      • update

        public void update​(byte[] in,
                           int inOff,
                           int len)
        Description copied from interface: Digest
        update the message digest with a block of bytes.
        Specified by:
        update in interface Digest
        Parameters:
        in - the byte array containing the data.
        inOff - the offset into the byte array where the data starts.
        len - the length of the data.
      • doFinal

        public int doFinal​(byte[] out,
                           int outOff)
        Description copied from interface: Digest
        close the digest, producing the final digest value. The doFinal call leaves the digest reset.
        Specified by:
        doFinal in interface Digest
        Parameters:
        out - the array the digest is to be copied into.
        outOff - the offset into the out array the digest is to start at.
      • reset

        public void reset()
        Description copied from interface: Digest
        reset the digest back to it's initial state.
        Specified by:
        reset in interface Digest
      • copy

        public Memoable copy()
        Description copied from interface: Memoable
        Produce a copy of this object with its configuration and in its current state.

        The returned object may be used simply to store the state, or may be used as a similar object starting from the copied state.

        Specified by:
        copy in interface Memoable
      • reset

        public void reset​(Memoable other)
        Description copied from interface: Memoable
        Restore a copied object state into this object.

        Implementations of this method should try to avoid or minimise memory allocation to perform the reset.

        Specified by:
        reset in interface Memoable
        Parameters:
        other - an object originally copied from an object of the same type as this instance.