1 package org.bouncycastle.crypto.generators; 2 3 import org.bouncycastle.crypto.AsymmetricCipherKeyPair; 4 import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; 5 import org.bouncycastle.crypto.KeyGenerationParameters; 6 import org.bouncycastle.crypto.params.DHKeyGenerationParameters; 7 import org.bouncycastle.crypto.params.DHParameters; 8 import org.bouncycastle.crypto.params.DHPrivateKeyParameters; 9 import org.bouncycastle.crypto.params.DHPublicKeyParameters; 10 11 import 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 */ 19 public 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