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

org.bouncycastle.crypto.prng.drbg

## Class DualECSP800DRBG

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

- All Implemented Interfaces:
    SP80090DRBG

      public class DualECSP800DRBG
      extends java.lang.Object
      implements SP80090DRBG

  A SP800-90A Dual EC DRBG.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `DualECSP800DRBG(Digest digest, int securityStrength, EntropySource entropySource, byte[] personalizationString, byte[] nonce)` Construct a SP800-90A Dual EC DRBG.
    `DualECSP800DRBG(DualECPoints[] pointSet, Digest digest, int securityStrength, EntropySource entropySource, byte[] personalizationString, byte[] nonce)` Construct a SP800-90A Dual EC DRBG.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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

    - #### DualECSP800DRBG

          public DualECSP800DRBG(Digest digest,
                                 int securityStrength,
                                 EntropySource entropySource,
                                 byte[] personalizationString,
                                 byte[] nonce)

      Construct a SP800-90A Dual EC DRBG.

      Minimum entropy requirement is the security strength requested.

      Parameters:
        `digest` - source digest to use with the DRB stream.
        `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).

    - #### DualECSP800DRBG

          public DualECSP800DRBG(DualECPoints[] pointSet,
                                 Digest digest,
                                 int securityStrength,
                                 EntropySource entropySource,
                                 byte[] personalizationString,
                                 byte[] nonce)

      Construct a SP800-90A Dual EC DRBG.

      Minimum entropy requirement is the security strength requested.

      Parameters:
        `pointSet` - an array of points to choose from, in order of increasing security strength
        `digest` - source digest to use with the DRB stream.
        `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 internal 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.