Class KeccakDigest

java.lang.Object
org.bouncycastle.crypto.digests.KeccakDigest
All Implemented Interfaces:
Digest, ExtendedDigest
Direct Known Subclasses:
SHA3Digest, SHAKEDigest

public class KeccakDigest extends Object implements ExtendedDigest
implementation of Keccak based on following KeccakNISTInterface.c from https://keccak.noekeon.org/

Following the naming conventions used in the C source code to enable easy review of the implementation.

  • Field Details

    • purpose

      protected final CryptoServicePurpose purpose
    • state

      protected long[] state
    • dataQueue

      protected byte[] dataQueue
    • rate

      protected int rate
    • bitsInQueue

      protected int bitsInQueue
    • fixedOutputLength

      protected int fixedOutputLength
    • squeezing

      protected boolean squeezing
  • Constructor Details

    • KeccakDigest

      public KeccakDigest()
    • KeccakDigest

      public KeccakDigest(CryptoServicePurpose purpose)
    • KeccakDigest

      public KeccakDigest(int bitLength)
    • KeccakDigest

      public KeccakDigest(int bitLength, CryptoServicePurpose purpose)
    • KeccakDigest

      public KeccakDigest(KeccakDigest source)
  • Method Details

    • getAlgorithmName

      public 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.
    • doFinal

      protected int doFinal(byte[] out, int outOff, byte partialByte, int partialBits)
    • reset

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

      public int getByteLength()
      Return the size of block that the compression function is applied to in bytes.
      Specified by:
      getByteLength in interface ExtendedDigest
      Returns:
      internal byte length of a block.
    • absorb

      protected void absorb(byte data)
    • absorb

      protected void absorb(byte[] data, int off, int len)
    • absorbBits

      protected void absorbBits(int data, int bits)
    • squeeze

      protected void squeeze(byte[] output, int offset, long outputLength)
    • cryptoServiceProperties

      protected CryptoServiceProperties cryptoServiceProperties()