1
package org.bouncycastle.jce.provider;
3
import java.security.AlgorithmParameterGeneratorSpi;
4
import java.security.AlgorithmParameters;
5
import java.security.InvalidAlgorithmParameterException;
6
import java.security.SecureRandom;
7
import java.security.spec.AlgorithmParameterSpec;
8
import java.security.spec.DSAParameterSpec;
10
import javax.crypto.spec.DHGenParameterSpec;
11
import javax.crypto.spec.DHParameterSpec;
12
import javax.crypto.spec.IvParameterSpec;
13
import javax.crypto.spec.RC2ParameterSpec;
15
import org.bouncycastle.crypto.generators.DHParametersGenerator;
16
import org.bouncycastle.crypto.generators.DSAParametersGenerator;
17
import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
18
import org.bouncycastle.crypto.params.DHParameters;
19
import org.bouncycastle.crypto.params.DSAParameters;
20
import org.bouncycastle.crypto.params.ElGamalParameters;
21
import org.bouncycastle.jce.spec.ElGamalParameterSpec;
23
public abstract class JDKAlgorithmParameterGenerator
24
extends AlgorithmParameterGeneratorSpi
26
protected SecureRandom random;
27
protected int strength = 1024;
29
protected void engineInit(
33
this.strength = strength;
37
public static class DH
38
extends JDKAlgorithmParameterGenerator
42
protected void engineInit(
43
AlgorithmParameterSpec genParamSpec,
45
throws InvalidAlgorithmParameterException
47
if (!(genParamSpec instanceof DHGenParameterSpec))
49
throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation");
51
DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec;
53
this.strength = spec.getPrimeSize();
54
this.l = spec.getExponentSize();
58
protected AlgorithmParameters engineGenerateParameters()
60
DHParametersGenerator pGen = new DHParametersGenerator();
64
pGen.init(strength, 20, random);
68
pGen.init(strength, 20, new SecureRandom());
71
DHParameters p = pGen.generateParameters();
73
AlgorithmParameters params;
77
params = AlgorithmParameters.getInstance("DH", "BC");
78
params.init(new DHParameterSpec(p.getP(), p.getG(), l));
82
throw new RuntimeException(e.getMessage());
89
public static class DSA
90
extends JDKAlgorithmParameterGenerator
92
protected void engineInit(
93
AlgorithmParameterSpec genParamSpec,
95
throws InvalidAlgorithmParameterException
97
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DSA parameter generation.");
100
protected AlgorithmParameters engineGenerateParameters()
102
DSAParametersGenerator pGen = new DSAParametersGenerator();
104
if ( random != null )
106
pGen.init(strength, 20, random);
110
pGen.init(strength, 20, new SecureRandom());
113
DSAParameters p = pGen.generateParameters();
115
AlgorithmParameters params;
119
params = AlgorithmParameters.getInstance("DSA", "BC");
120
params.init(new DSAParameterSpec(p.getP(), p.getQ(), p.getG()));
124
throw new RuntimeException(e.getMessage());
131
public static class ElGamal
132
extends JDKAlgorithmParameterGenerator
134
protected void engineInit(
135
AlgorithmParameterSpec genParamSpec,
137
throws InvalidAlgorithmParameterException
139
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for ElGamal parameter generation.");
142
protected AlgorithmParameters engineGenerateParameters()
144
ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
146
if ( random != null )
148
pGen.init(strength, 20, random);
152
pGen.init(strength, 20, new SecureRandom());
155
ElGamalParameters p = pGen.generateParameters();
157
AlgorithmParameters params;
161
params = AlgorithmParameters.getInstance("ElGamal", "BC");
162
params.init(new ElGamalParameterSpec(p.getP(), p.getG()));
166
throw new RuntimeException(e.getMessage());
173
public static class DES
174
extends JDKAlgorithmParameterGenerator
176
protected void engineInit(
177
AlgorithmParameterSpec genParamSpec,
179
throws InvalidAlgorithmParameterException
181
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
184
protected AlgorithmParameters engineGenerateParameters()
186
byte[] iv = new byte[8];
190
random = new SecureRandom();
193
random.nextBytes(iv);
195
AlgorithmParameters params;
199
params = AlgorithmParameters.getInstance("DES", "BC");
200
params.init(new IvParameterSpec(iv));
204
throw new RuntimeException(e.getMessage());
211
public static class RC2
212
extends JDKAlgorithmParameterGenerator
214
RC2ParameterSpec spec = null;
216
protected void engineInit(
217
AlgorithmParameterSpec genParamSpec,
219
throws InvalidAlgorithmParameterException
221
if (genParamSpec instanceof RC2ParameterSpec)
223
spec = (RC2ParameterSpec)genParamSpec;
227
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
230
protected AlgorithmParameters engineGenerateParameters()
232
AlgorithmParameters params;
236
byte[] iv = new byte[8];
240
random = new SecureRandom();
243
random.nextBytes(iv);
247
params = AlgorithmParameters.getInstance("RC2", "BC");
248
params.init(new IvParameterSpec(iv));
252
throw new RuntimeException(e.getMessage());
259
params = AlgorithmParameters.getInstance("RC2", "BC");
264
throw new RuntimeException(e.getMessage());
272
public static class AES
273
extends JDKAlgorithmParameterGenerator
275
protected void engineInit(
276
AlgorithmParameterSpec genParamSpec,
278
throws InvalidAlgorithmParameterException
280
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
283
protected AlgorithmParameters engineGenerateParameters()
285
byte[] iv = new byte[16];
289
random = new SecureRandom();
292
random.nextBytes(iv);
294
AlgorithmParameters params;
298
params = AlgorithmParameters.getInstance("AES", "BC");
299
params.init(new IvParameterSpec(iv));
303
throw new RuntimeException(e.getMessage());
310
public static class IDEA
311
extends JDKAlgorithmParameterGenerator
313
protected void engineInit(
314
AlgorithmParameterSpec genParamSpec,
316
throws InvalidAlgorithmParameterException
318
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for IDEA parameter generation.");
321
protected AlgorithmParameters engineGenerateParameters()
323
byte[] iv = new byte[8];
327
random = new SecureRandom();
330
random.nextBytes(iv);
332
AlgorithmParameters params;
336
params = AlgorithmParameters.getInstance("IDEA", "BC");
337
params.init(new IvParameterSpec(iv));
341
throw new RuntimeException(e.getMessage());
348
public static class CAST5
349
extends JDKAlgorithmParameterGenerator
351
protected void engineInit(
352
AlgorithmParameterSpec genParamSpec,
354
throws InvalidAlgorithmParameterException
356
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for CAST5 parameter generation.");
359
protected AlgorithmParameters engineGenerateParameters()
361
byte[] iv = new byte[8];
365
random = new SecureRandom();
368
random.nextBytes(iv);
370
AlgorithmParameters params;
374
params = AlgorithmParameters.getInstance("CAST5", "BC");
375
params.init(new IvParameterSpec(iv));
379
throw new RuntimeException(e.getMessage());
1
package org.bouncycastle.jce.provider;
3
import java.security.AlgorithmParameterGeneratorSpi;
4
import java.security.AlgorithmParameters;
5
import java.security.InvalidAlgorithmParameterException;
6
import java.security.SecureRandom;
7
import java.security.spec.AlgorithmParameterSpec;
8
import java.security.spec.DSAParameterSpec;
10
import javax.crypto.spec.DHGenParameterSpec;
11
import javax.crypto.spec.DHParameterSpec;
12
import javax.crypto.spec.IvParameterSpec;
13
import javax.crypto.spec.RC2ParameterSpec;
15
import org.bouncycastle.crypto.generators.DHParametersGenerator;
16
import org.bouncycastle.crypto.generators.DSAParametersGenerator;
17
import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
18
import org.bouncycastle.crypto.params.DHParameters;
19
import org.bouncycastle.crypto.params.DSAParameters;
20
import org.bouncycastle.crypto.params.ElGamalParameters;
21
import org.bouncycastle.jce.spec.ElGamalParameterSpec;
23
public abstract class JDKAlgorithmParameterGenerator
24
extends AlgorithmParameterGeneratorSpi
26
protected SecureRandom random;
27
protected int strength = 1024;
29
protected void engineInit(
33
this.strength = strength;
37
public static class DH
38
extends JDKAlgorithmParameterGenerator
42
protected void engineInit(
43
AlgorithmParameterSpec genParamSpec,
45
throws InvalidAlgorithmParameterException
47
if (!(genParamSpec instanceof DHGenParameterSpec))
49
throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation");
51
DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec;
53
this.strength = spec.getPrimeSize();
54
this.l = spec.getExponentSize();
58
protected AlgorithmParameters engineGenerateParameters()
60
DHParametersGenerator pGen = new DHParametersGenerator();
64
pGen.init(strength, 20, random);
68
pGen.init(strength, 20, new SecureRandom());
71
DHParameters p = pGen.generateParameters();
73
AlgorithmParameters params;
77
params = AlgorithmParameters.getInstance("DH", "BC");
78
params.init(new DHParameterSpec(p.getP(), p.getG(), l));
82
throw new RuntimeException(e.getMessage());
89
public static class DSA
90
extends JDKAlgorithmParameterGenerator
92
protected void engineInit(
93
AlgorithmParameterSpec genParamSpec,
95
throws InvalidAlgorithmParameterException
97
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DSA parameter generation.");
100
protected AlgorithmParameters engineGenerateParameters()
102
DSAParametersGenerator pGen = new DSAParametersGenerator();
104
if ( random != null )
106
pGen.init(strength, 20, random);
110
pGen.init(strength, 20, new SecureRandom());
113
DSAParameters p = pGen.generateParameters();
115
AlgorithmParameters params;
119
params = AlgorithmParameters.getInstance("DSA", "BC");
120
params.init(new DSAParameterSpec(p.getP(), p.getQ(), p.getG()));
124
throw new RuntimeException(e.getMessage());
131
public static class ElGamal
132
extends JDKAlgorithmParameterGenerator
134
protected void engineInit(
135
AlgorithmParameterSpec genParamSpec,
137
throws InvalidAlgorithmParameterException
139
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for ElGamal parameter generation.");
142
protected AlgorithmParameters engineGenerateParameters()
144
ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
146
if ( random != null )
148
pGen.init(strength, 20, random);
152
pGen.init(strength, 20, new SecureRandom());
155
ElGamalParameters p = pGen.generateParameters();
157
AlgorithmParameters params;
161
params = AlgorithmParameters.getInstance("ElGamal", "BC");
162
params.init(new ElGamalParameterSpec(p.getP(), p.getG()));
166
throw new RuntimeException(e.getMessage());
173
public static class DES
174
extends JDKAlgorithmParameterGenerator
176
protected void engineInit(
177
AlgorithmParameterSpec genParamSpec,
179
throws InvalidAlgorithmParameterException
181
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
184
protected AlgorithmParameters engineGenerateParameters()
186
byte[] iv = new byte[8];
190
random = new SecureRandom();
193
random.nextBytes(iv);
195
AlgorithmParameters params;
199
params = AlgorithmParameters.getInstance("DES", "BC");
200
params.init(new IvParameterSpec(iv));
204
throw new RuntimeException(e.getMessage());
211
public static class RC2
212
extends JDKAlgorithmParameterGenerator
214
RC2ParameterSpec spec = null;
216
protected void engineInit(
217
AlgorithmParameterSpec genParamSpec,
219
throws InvalidAlgorithmParameterException
221
if (genParamSpec instanceof RC2ParameterSpec)
223
spec = (RC2ParameterSpec)genParamSpec;
227
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
230
protected AlgorithmParameters engineGenerateParameters()
232
AlgorithmParameters params;
236
byte[] iv = new byte[8];
240
random = new SecureRandom();
243
random.nextBytes(iv);
247
params = AlgorithmParameters.getInstance("RC2", "BC");
248
params.init(new IvParameterSpec(iv));
252
throw new RuntimeException(e.getMessage());
259
params = AlgorithmParameters.getInstance("RC2", "BC");
264
throw new RuntimeException(e.getMessage());
272
public static class AES
273
extends JDKAlgorithmParameterGenerator
275
protected void engineInit(
276
AlgorithmParameterSpec genParamSpec,
278
throws InvalidAlgorithmParameterException
280
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
283
protected AlgorithmParameters engineGenerateParameters()
285
byte[] iv = new byte[16];
289
random = new SecureRandom();
292
random.nextBytes(iv);
294
AlgorithmParameters params;
298
params = AlgorithmParameters.getInstance("AES", "BC");
299
params.init(new IvParameterSpec(iv));
303
throw new RuntimeException(e.getMessage());
310
public static class IDEA
311
extends JDKAlgorithmParameterGenerator
313
protected void engineInit(
314
AlgorithmParameterSpec genParamSpec,
316
throws InvalidAlgorithmParameterException
318
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for IDEA parameter generation.");
321
protected AlgorithmParameters engineGenerateParameters()
323
byte[] iv = new byte[8];
327
random = new SecureRandom();
330
random.nextBytes(iv);
332
AlgorithmParameters params;
336
params = AlgorithmParameters.getInstance("IDEA", "BC");
337
params.init(new IvParameterSpec(iv));
341
throw new RuntimeException(e.getMessage());
348
public static class CAST5
349
extends JDKAlgorithmParameterGenerator
351
protected void engineInit(
352
AlgorithmParameterSpec genParamSpec,
354
throws InvalidAlgorithmParameterException
356
throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for CAST5 parameter generation.");
359
protected AlgorithmParameters engineGenerateParameters()
361
byte[] iv = new byte[8];
365
random = new SecureRandom();
368
random.nextBytes(iv);
370
AlgorithmParameters params;
374
params = AlgorithmParameters.getInstance("CAST5", "BC");
375
params.init(new IvParameterSpec(iv));
379
throw new RuntimeException(e.getMessage());