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

Methods
`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.