14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.asymmetric.dh; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.AlgorithmParameters; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.InvalidAlgorithmParameterException; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.SecureRandom; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.AlgorithmParameterSpec; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.spec.DHGenParameterSpec; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.spec.DHParameterSpec; 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.generators.DHParametersGenerator; 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.params.DHParameters; 13028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giroimport org.bouncycastle.jcajce.provider.asymmetric.util.BaseAlgorithmParameterGeneratorSpi; 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class AlgorithmParameterGeneratorSpi 16028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro extends BaseAlgorithmParameterGeneratorSpi 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected SecureRandom random; 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected int strength = 1024; 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private int l = 0; 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected void engineInit( 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int strength, 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom SecureRandom random) 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.strength = strength; 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.random = random; 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected void engineInit( 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom AlgorithmParameterSpec genParamSpec, 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom SecureRandom random) 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws InvalidAlgorithmParameterException 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (!(genParamSpec instanceof DHGenParameterSpec)) 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation"); 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec; 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.strength = spec.getPrimeSize(); 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.l = spec.getExponentSize(); 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.random = random; 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected AlgorithmParameters engineGenerateParameters() 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DHParametersGenerator pGen = new DHParametersGenerator(); 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (random != null) 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom pGen.init(strength, 20, random); 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom pGen.init(strength, 20, new SecureRandom()); 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DHParameters p = pGen.generateParameters(); 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom AlgorithmParameters params; 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom try 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 66028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro params = createParametersInstance("DH"); 674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom params.init(new DHParameterSpec(p.getP(), p.getG(), l)); 684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom catch (Exception e) 704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new RuntimeException(e.getMessage()); 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return params; 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 78