cryptix.provider.elgamal

Class RawElGamalCipher

public class RawElGamalCipher extends Cipher implements AsymmetricCipher, Cloneable

The raw ElGamal encryption algorithm.

References:

  1. Bruce Schneier, "Section 19.6 ElGamal," Applied Cryptography, 2nd edition, John Wiley & Sons, 1996.

Copyright © 1997 Systemics Ltd on behalf of the Cryptix Development Team.
All rights reserved.

$Revision: 1.3 $

Since: Cryptix 2.2.2

Author: David Hopwood

Constructor Summary
RawElGamalCipher()
Constructor for a RawElGamalCipher.
Method Summary
protected intengineCiphertextBlockSize()
SPI: Return the ciphertext block size, in bytes.
protected ObjectengineGetParameter(String param)
SPI: Return an algorithm-specific parameter.
protected voidengineInitDecrypt(Key key)
SPI: Initializes the cipher for decryption, using the given private key.
protected voidengineInitEncrypt(Key key)
SPI: Initializes the cipher for encryption, using the given public key.
protected intenginePlaintextBlockSize()
SPI: Return the plaintext block size, in bytes.
protected voidengineSetParameter(String param, Object value)
SPI: Set an algorithm-specific parameter.
protected intengineUpdate(byte[] in, int inOffset, int inLen, byte[] out, int outOffset)
SPI: DOCUMENT ME
static voidmain(String[] args)
Entry point for very basic self_test.
static voidself_test(PrintWriter out)

Constructor Detail

RawElGamalCipher

public RawElGamalCipher()
Constructor for a RawElGamalCipher.

Method Detail

engineCiphertextBlockSize

protected int engineCiphertextBlockSize()
SPI: Return the ciphertext block size, in bytes. For ElGamal this is double the number of bytes needed to represent p-1.

If the key has not been set, this method throws CryptixException (a subclass of ProviderException).

Returns: the ciphertext block size

engineGetParameter

protected Object engineGetParameter(String param)
SPI: Return an algorithm-specific parameter.

ElGamal has one algorithm-specific parameter called "random", as described above. It is guaranteed to be a subclass of java.util.Random. Calling this method with a param string other than "random" will return null.

Parameters: param the string name of the parameter.

Returns: the object that represents the parameter value, or null if there is none.

engineInitDecrypt

protected void engineInitDecrypt(Key key)
SPI: Initializes the cipher for decryption, using the given private key. The key object must implement java.security.interfaces.ElGamalPrivateKey.

Parameters: key the private key

Throws: InvalidKeyException if !(key instanceof java.security.interfaces.ElGamalPrivateKey), or the key is otherwise invalid

engineInitEncrypt

protected void engineInitEncrypt(Key key)
SPI: Initializes the cipher for encryption, using the given public key. The key object must implement java.security.interfaces.ElGamalPublicKey.

Parameters: key the public key

Throws: InvalidKeyException if !(key instanceof java.security.interfaces.ElGamalPublicKey), or the key is otherwise invalid

enginePlaintextBlockSize

protected int enginePlaintextBlockSize()
SPI: Return the plaintext block size, in bytes. For ElGamal this is the number of bytes needed for a bit string one bit shorter than the prime, p.

If the key has not been set, this method throws CryptixException (a subclass of ProviderException).

Returns: the plaintext block size

engineSetParameter

protected void engineSetParameter(String param, Object value)
SPI: Set an algorithm-specific parameter.

ElGamal has one algorithm-specific parameter called "random", of type java.util.Random, which specifies the source of random bits used to generate the k values needed for encryption. If this parameter is not set when initKey is called, the result of new SecureRandom() will be used.

You can set the "random" parameter using the following code:

   try {
       elgamal.setParameter("random", existingSecureRandom);
   } catch (InvalidParameterException e) { /* ignore */ }
   elgamal.initEncrypt(publicKey);
 

This is not useful if the cipher will only be used for decryption.

Parameters: param the string identifier of the parameter. value the parameter value.

Throws: InvalidParameterException if (!(param.equals("random") && value instanceof java.util.Random))

engineUpdate

protected int engineUpdate(byte[] in, int inOffset, int inLen, byte[] out, int outOffset)
SPI: DOCUMENT ME

main

public static final void main(String[] args)
Entry point for very basic self_test.

self_test

public static void self_test(PrintWriter out)