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

org.bouncycastle.crypto.engines

## Class ElGamalEngine

- java.lang.Object
- - org.bouncycastle.crypto.engines.ElGamalEngine

- All Implemented Interfaces:
    AsymmetricBlockCipher

      public class ElGamalEngine
      extends java.lang.Object
      implements AsymmetricBlockCipher

  this does your basic ElGamal algorithm.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ElGamalEngine()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `getInputBlockSize()` Return the maximum size for an input block to this engine.
    `int` | `getOutputBlockSize()` Return the maximum size for an output block to this engine.
    `void` | `init(boolean forEncryption, CipherParameters param)` initialise the ElGamal engine.
    `byte[]` | `processBlock(byte[] in, int inOff, int inLen)` Process a single block using the basic ElGamal algorithm.

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

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

- - ### Constructor Detail

    - #### ElGamalEngine

          public ElGamalEngine()

  - ### Method Detail

    - #### init

          public void init(boolean forEncryption,
                           CipherParameters param)

      initialise the ElGamal engine.
      Specified by:
        `init` in interface `AsymmetricBlockCipher`
      Parameters:
        `forEncryption` - true if we are encrypting, false otherwise.
        `param` - the necessary ElGamal key parameters.

    - #### getInputBlockSize

          public int getInputBlockSize()

      Return the maximum size for an input block to this engine. For ElGamal this is always one byte less than the size of P on encryption, and twice the length as the size of P on decryption.
      Specified by:
        `getInputBlockSize` in interface `AsymmetricBlockCipher`
      Returns:
        maximum size for an input block.

    - #### getOutputBlockSize

          public int getOutputBlockSize()

      Return the maximum size for an output block to this engine. For ElGamal this is always one byte less than the size of P on decryption, and twice the length as the size of P on encryption.
      Specified by:
        `getOutputBlockSize` in interface `AsymmetricBlockCipher`
      Returns:
        maximum size for an output block.

    - #### processBlock

          public byte[] processBlock(byte[] in,
                                     int inOff,
                                     int inLen)

      Process a single block using the basic ElGamal algorithm.
      Specified by:
        `processBlock` in interface `AsymmetricBlockCipher`
      Parameters:
        `in` - the input array.
        `inOff` - the offset into the input buffer where the data starts.
        `inLen` - the length of the data to be processed.
      Returns:
        the result of the ElGamal process.
      Throws:
        `DataLengthException` - the input block is too large.