| package org.bouncycastle.jcajce.provider.asymmetric.dh; |
| |
| import java.security.AlgorithmParameters; |
| import java.security.InvalidAlgorithmParameterException; |
| import java.security.SecureRandom; |
| import java.security.spec.AlgorithmParameterSpec; |
| |
| import javax.crypto.spec.DHGenParameterSpec; |
| import javax.crypto.spec.DHParameterSpec; |
| |
| import org.bouncycastle.crypto.generators.DHParametersGenerator; |
| import org.bouncycastle.crypto.params.DHParameters; |
| import org.bouncycastle.jcajce.provider.asymmetric.util.BaseAlgorithmParameterGeneratorSpi; |
| import org.bouncycastle.jcajce.provider.asymmetric.util.PrimeCertaintyCalculator; |
| |
| public class AlgorithmParameterGeneratorSpi |
| extends BaseAlgorithmParameterGeneratorSpi |
| { |
| protected SecureRandom random; |
| protected int strength = 2048; |
| |
| private int l = 0; |
| |
| protected void engineInit( |
| int strength, |
| SecureRandom random) |
| { |
| this.strength = strength; |
| this.random = random; |
| } |
| |
| protected void engineInit( |
| AlgorithmParameterSpec genParamSpec, |
| SecureRandom random) |
| throws InvalidAlgorithmParameterException |
| { |
| if (!(genParamSpec instanceof DHGenParameterSpec)) |
| { |
| throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation"); |
| } |
| DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec; |
| |
| this.strength = spec.getPrimeSize(); |
| this.l = spec.getExponentSize(); |
| this.random = random; |
| } |
| |
| protected AlgorithmParameters engineGenerateParameters() |
| { |
| DHParametersGenerator pGen = new DHParametersGenerator(); |
| |
| int certainty = PrimeCertaintyCalculator.getDefaultCertainty(strength); |
| |
| if (random != null) |
| { |
| pGen.init(strength, certainty, random); |
| } |
| else |
| { |
| pGen.init(strength, certainty, new SecureRandom()); |
| } |
| |
| DHParameters p = pGen.generateParameters(); |
| |
| AlgorithmParameters params; |
| |
| try |
| { |
| params = createParametersInstance("DH"); |
| params.init(new DHParameterSpec(p.getP(), p.getG(), l)); |
| } |
| catch (Exception e) |
| { |
| throw new RuntimeException(e.getMessage()); |
| } |
| |
| return params; |
| } |
| |
| } |