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