All Packages Class Hierarchy This Package Previous Next Index
Class cryptix.provider.elgamal.BaseElGamalKeyPairGenerator
java.lang.Object
|
+----java.security.KeyPairGenerator
|
+----cryptix.provider.elgamal.BaseElGamalKeyPairGenerator
- public class BaseElGamalKeyPairGenerator
- extends KeyPairGenerator
- implements ElGamalKeyPairGenerator
A class capable of generating ElGamal key pairs. The generator is first
initialized, then used to generate one or more key pairs.
Users wishing to indicate the prime or base, and to generate a key
pair suitable for use with the ElGamal signature or encryption algorithms
typically
- Get a key pair generator for the ElGamal algorithms by calling the
KeyPairGenerator
getInstance
method with "ElGamal"
as its argument.
- Initialize the generator by casting the result to an
ElGamalKeyPairGenerator and calling one of the
initialize
methods.
- Generate one or more key pairs by calling the
generateKeyPair
method, as often as desired.
The algorithm used to generate ElGamal keys is as follows:
- Generate a random probable-prime, p, of the desired length
(using java.math.BigInteger.generatePrime).
- Find the small prime factors of p-1 by trial division.
- Divide p-1 by all its small prime factors, and check that
the result is probably-prime.
- Pick a random g, with one less bit than p.
- Repeat step 3 until g is a generator mod p
(using the test given in Schneier section 11.3, and noting
that we know the factors of p-1 from steps 2 and 3).
- Pick a random x, also with one less bit than p.
- Calculate y = g^x mod p.
If p and g are specified in advance then only the last two
steps are needed.
References:
- Bruce Schneier,
"Section 19.6 ElGamal," and "Section 11.3 Number Theory" (heading
"Generators," pages 253-254),
Applied Cryptography, 2nd edition,
John Wiley & Sons, 1996
- S.C. Pohlig and M.E. Hellman, "An Improved Algorithm for Computing
Logarithms in GF(p) and Its Cryptographic Significance,"
IEEE Transactions on Information Theory,
v. 24 n. 1, Jan 1978, pages 106-111.
- IEEE P1363 draft standard,
http://stdsbbs.ieee.org/groups/1363/index.html
Copyright © 1997
Systemics Ltd on behalf of the
Cryptix Development Team.
All rights reserved.
$Revision: 1.4 $
- Author:
- David Hopwood
- See Also:
- KeyPairGenerator
-
g
-
-
p
-
-
source
-
-
BaseElGamalKeyPairGenerator()
-
-
generateKeyPair()
- Generates a key pair.
-
generateParams(int, SecureRandom)
- Generates new parameters, p and g.
-
initialize(BigInteger, BigInteger, SecureRandom)
- Initialises the key pair generator using the specified prime
(p) and base (g).
-
initialize(ElGamalParams, SecureRandom)
- Initialises the key pair generator using the prime and base from
the specified ElGamalParams object.
-
initialize(int, boolean, SecureRandom)
- Initialises the key pair generator for a given prime length,
without parameters.
-
initialize(int, SecureRandom)
- Initialises the key pair generator for a given prime length,
without parameters.
p
protected BigInteger p
g
protected BigInteger g
source
protected SecureRandom source
BaseElGamalKeyPairGenerator
public BaseElGamalKeyPairGenerator()
initialize
public void initialize(ElGamalParams params,
SecureRandom random) throws InvalidParameterException
- Initialises the key pair generator using the prime and base from
the specified ElGamalParams object.
- Parameters:
- params - the parameters to use to generate the keys.
- random - the random bit source to use to generate
key bits.
- Throws: NullPointerException
- if params == null || random == null
- Throws: InvalidParameterException
- if the parameters passed are
invalid.
initialize
public void initialize(BigInteger prime,
BigInteger base,
SecureRandom random) throws InvalidParameterException
- Initialises the key pair generator using the specified prime
(p) and base (g). The difficulty of cracking ElGamal
by solving the discrete logarithm problem is dependent on the length
of the prime.
An InvalidParameterException will be thrown if base >= prime
.
- Parameters:
- prime - the prime to be used, as a java.math.BigInteger
- base - the base to be used, as a java.math.BigInteger
- random - the random bit source to use to generate
key bits.
- Throws: NullPointerException
- if prime == null || base == null ||
random == null
- Throws: InvalidParameterException
- if the parameters passed are
invalid.
initialize
public void initialize(int primeLen,
SecureRandom random)
- Initialises the key pair generator for a given prime length,
without parameters.
- Parameters:
- primeLen - the prime length, in bits. Valid lengths are any
integer >= 256.
- random - the random bit source to use to generate
key bits.
- Throws: InvalidParameterException
- if the prime length is less
than 256.
- Overrides:
- initialize in class KeyPairGenerator
initialize
public void initialize(int primeLen,
boolean genParams,
SecureRandom random) throws InvalidParameterException
- Initialises the key pair generator for a given prime length,
without parameters.
If genParams is true, this method will generate new
p and g parameters. If it is false, the method will use precomputed
parameters for the prime length requested. If there are no
precomputed parameters for that prime length, an exception will be
thrown. It is guaranteed that there will always be default
parameters for a prime length of 512 bits.
[Future versions will probably also support 1024, 1536, 2048, 3072,
and 4096 bits.]
- Parameters:
- primeLen - the prime length, in bits. Valid lengths are any
integer >= 256.
- random - the random bit source to use to generate
key bits.
- genParams - whether to generate new parameters for the prime
length requested.
- Throws: InvalidParameterException
- if the prime length is less
than 256, or if genParams is false and there are not
precomputed parameters for the prime length requested.
generateKeyPair
public KeyPair generateKeyPair()
- Generates a key pair.
- Overrides:
- generateKeyPair in class KeyPairGenerator
generateParams
public ElGamalParams generateParams(int primeLen,
SecureRandom random) throws InvalidParameterException
- Generates new parameters, p and g. This method
does not change the parameters currently being used by
generateKeyPair
.
- Parameters:
- primeLen - the prime length, in bits. Valid lengths are any
integer >= 256.
- random - the random bit source to use to generate the parameters.
- Throws: InvalidParameterException
- if the prime length is less
than 256.
All Packages Class Hierarchy This Package Previous Next Index