Package org.bouncycastle.crypto.prng.drbg

## Class HMacSP800DRBG

- java.lang.Object
- - org.bouncycastle.crypto.prng.drbg.HMacSP800DRBG

- All Implemented Interfaces:
    `SP80090DRBG`

      public class HMacSP800DRBG
      extends java.lang.Object
      implements SP80090DRBG

  A SP800-90A HMAC DRBG.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `HMacSP800DRBG​(Mac hMac, int securityStrength, EntropySource entropySource, byte[] personalizationString, byte[] nonce)` | Construct a SP800-90A Hash DRBG.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `int` | `generate​(byte[] output, byte[] additionalInput, boolean predictionResistant)` | Populate a passed in array with random data.
    `int` | `getBlockSize()` | Return the block size (in bits) of the DRBG.
    `void` | `reseed​(byte[] additionalInput)` | Reseed the DRBG.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### HMacSP800DRBG

          public HMacSP800DRBG​(Mac hMac,
                               int securityStrength,
                               EntropySource entropySource,
                               byte[] personalizationString,
                               byte[] nonce)

      Construct a SP800-90A Hash DRBG.

      Minimum entropy requirement is the security strength requested.

      Parameters:
        `hMac` - Hash MAC to base the DRBG on.
        `securityStrength` - security strength required (in bits)
        `entropySource` - source of entropy to use for seeding/reseeding.
        `personalizationString` - personalization string to distinguish this DRBG (may be null).
        `nonce` - nonce to further distinguish this DRBG (may be null).

  - ### Method Detail

    - #### getBlockSize

          public int getBlockSize()

      Return the block size (in bits) of the DRBG.
      Specified by:
        `getBlockSize` in interface `SP80090DRBG`
      Returns:
        the number of bits produced on each round of the DRBG.

    - #### generate

          public int generate​(byte[] output,
                              byte[] additionalInput,
                              boolean predictionResistant)

      Populate a passed in array with random data.
      Specified by:
        `generate` in interface `SP80090DRBG`
      Parameters:
        `output` - output array for generated bits.
        `additionalInput` - additional input to be added to the DRBG in this step.
        `predictionResistant` - true if a reseed should be forced, false otherwise.
      Returns:
        number of bits generated, -1 if a reseed required.

    - #### reseed

          public void reseed​(byte[] additionalInput)

      Reseed the DRBG.
      Specified by:
        `reseed` in interface `SP80090DRBG`
      Parameters:
        `additionalInput` - additional input to be added to the DRBG in this step.