ParallelHash (Bouncy Castle Library 1.85 API Specification)
Date: 2026-07-12

org.bouncycastle.crypto.digests

## Class ParallelHash

- java.lang.Object
- - org.bouncycastle.crypto.digests.ParallelHash

- All Implemented Interfaces:
    Digest, ExtendedDigest, Xof

      public class ParallelHash
      extends java.lang.Object
      implements Xof, Digest

  ParallelHash - a hash designed to support the efficient hashing of very long strings, by taking advantage of the parallelism available in modern processors with an optional XOF mode.

  From NIST Special Publication 800-185 - SHA-3 Derived Functions:cSHAKE, KMAC, TupleHash and ParallelHash

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ParallelHash(int bitLength, byte[] S, int B)` Base constructor.
    `ParallelHash(int bitLength, byte[] S, int B, int outputSize)`
    `ParallelHash(int bitLength, byte[] S, int B, int outputSize, CryptoServicePurpose purpose)`
    `ParallelHash(ParallelHash source)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `doFinal(byte[] out, int outOff)` close the digest, producing the final digest value.
    `int` | `doFinal(byte[] out, int outOff, int outLen)` Output the results of the final calculation for this digest to outLen number of bytes.
    `int` | `doOutput(byte[] out, int outOff, int outLen)` Start outputting the results of the final calculation for this digest.
    `java.lang.String` | `getAlgorithmName()` return the algorithm name
    `int` | `getByteLength()` Return the size in bytes of the internal buffer the digest applies it's compression function to.
    `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` | `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

    - #### ParallelHash

          public ParallelHash(int bitLength,
                              byte[] S,
                              int B)

      Base constructor.
      Parameters:
        `bitLength` - security strength (bits) of the underlying SHAKE function, 128 or 256.
        `S` - the customization string - available for local use.
        `B` - the blocksize (in bytes) for hashing.

    - #### ParallelHash

          public ParallelHash(int bitLength,
                              byte[] S,
                              int B,
                              int outputSize)

    - #### ParallelHash

          public ParallelHash(int bitLength,
                              byte[] S,
                              int B,
                              int outputSize,
                              CryptoServicePurpose purpose)

    - #### ParallelHash

          public ParallelHash(ParallelHash source)

  - ### 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

    - #### getByteLength

          public int getByteLength()

      Description copied from interface: `ExtendedDigest`
      Return the size in bytes of the internal buffer the digest applies it's compression function to.
      Specified by:
        `getByteLength` in interface `ExtendedDigest`
      Returns:
        byte length of the digests internal buffer.

    - #### 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)
                      throws java.lang.IllegalStateException

      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.
      Throws:
        `java.lang.IllegalStateException`

    - #### update

          public void update(byte[] in,
                             int inOff,
                             int len)
                      throws DataLengthException,
                             java.lang.IllegalStateException

      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.
      Throws:
        `DataLengthException`
        `java.lang.IllegalStateException`

    - #### doFinal

          public int doFinal(byte[] out,
                             int outOff)
                      throws DataLengthException,
                             java.lang.IllegalStateException

      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.
      Throws:
        `DataLengthException`
        `java.lang.IllegalStateException`

    - #### doFinal

          public int doFinal(byte[] out,
                             int outOff,
                             int outLen)

      Description copied from interface: `Xof`
      Output the results of the final calculation for this digest to outLen number of bytes.
      Specified by:
        `doFinal` in interface `Xof`
      Parameters:
        `out` - output array to write the output bytes to.
        `outOff` - offset to start writing the bytes at.
        `outLen` - the number of output bytes requested.
      Returns:
        the number of bytes written

    - #### doOutput

          public int doOutput(byte[] out,
                              int outOff,
                              int outLen)

      Description copied from interface: `Xof`
      Start outputting the results of the final calculation for this digest. Unlike doFinal, this method will continue producing output until the Xof is explicitly reset, or signals otherwise.
      Specified by:
        `doOutput` in interface `Xof`
      Parameters:
        `out` - output array to write the output bytes to.
        `outOff` - offset to start writing the bytes at.
        `outLen` - the number of output bytes requested.
      Returns:
        the number of bytes written

    - #### reset

          public void reset()

      Description copied from interface: `Digest`
      reset the digest back to it's initial state.
      Specified by:
        `reset` in interface `Digest`