1package org.bouncycastle.crypto.generators;
2
3import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
4import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator;
5import org.bouncycastle.crypto.KeyGenerationParameters;
6import org.bouncycastle.crypto.params.DHKeyGenerationParameters;
7import org.bouncycastle.crypto.params.DHParameters;
8import org.bouncycastle.crypto.params.DHPrivateKeyParameters;
9import org.bouncycastle.crypto.params.DHPublicKeyParameters;
10
11import java.math.BigInteger;
12
13/**
14 * a basic Diffie-Hellman key pair generator.
15 *
16 * This generates keys consistent for use with the basic algorithm for
17 * Diffie-Hellman.
18 */
19public class DHBasicKeyPairGenerator
20    implements AsymmetricCipherKeyPairGenerator
21{
22    private DHKeyGenerationParameters param;
23
24    public void init(
25        KeyGenerationParameters param)
26    {
27        this.param = (DHKeyGenerationParameters)param;
28    }
29
30    public AsymmetricCipherKeyPair generateKeyPair()
31    {
32        DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE;
33        DHParameters dhp = param.getParameters();
34
35        BigInteger x = helper.calculatePrivate(dhp, param.getRandom());
36        BigInteger y = helper.calculatePublic(dhp, x);
37
38        return new AsymmetricCipherKeyPair(
39            new DHPublicKeyParameters(y, dhp),
40            new DHPrivateKeyParameters(x, dhp));
41    }
42}
43