Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/java/security/AlgorithmParameterGenerator.java
38829 views
1
/*
2
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package java.security;
27
28
import java.security.spec.AlgorithmParameterSpec;
29
30
/**
31
* The {@code AlgorithmParameterGenerator} class is used to generate a
32
* set of
33
* parameters to be used with a certain algorithm. Parameter generators
34
* are constructed using the {@code getInstance} factory methods
35
* (static methods that return instances of a given class).
36
*
37
* <P>The object that will generate the parameters can be initialized
38
* in two different ways: in an algorithm-independent manner, or in an
39
* algorithm-specific manner:
40
*
41
* <ul>
42
* <li>The algorithm-independent approach uses the fact that all parameter
43
* generators share the concept of a "size" and a
44
* source of randomness. The measure of size is universally shared
45
* by all algorithm parameters, though it is interpreted differently
46
* for different algorithms. For example, in the case of parameters for
47
* the <i>DSA</i> algorithm, "size" corresponds to the size
48
* of the prime modulus (in bits).
49
* When using this approach, algorithm-specific parameter generation
50
* values - if any - default to some standard values, unless they can be
51
* derived from the specified size.
52
*
53
* <li>The other approach initializes a parameter generator object
54
* using algorithm-specific semantics, which are represented by a set of
55
* algorithm-specific parameter generation values. To generate
56
* Diffie-Hellman system parameters, for example, the parameter generation
57
* values usually
58
* consist of the size of the prime modulus and the size of the
59
* random exponent, both specified in number of bits.
60
* </ul>
61
*
62
* <P>In case the client does not explicitly initialize the
63
* AlgorithmParameterGenerator
64
* (via a call to an {@code init} method), each provider must supply (and
65
* document) a default initialization. For example, the Sun provider uses a
66
* default modulus prime size of 1024 bits for the generation of DSA
67
* parameters.
68
*
69
* <p> Every implementation of the Java platform is required to support the
70
* following standard {@code AlgorithmParameterGenerator} algorithms and
71
* keysizes in parentheses:
72
* <ul>
73
* <li>{@code DiffieHellman} (1024)</li>
74
* <li>{@code DSA} (1024)</li>
75
* </ul>
76
* These algorithms are described in the <a href=
77
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
78
* AlgorithmParameterGenerator section</a> of the
79
* Java Cryptography Architecture Standard Algorithm Name Documentation.
80
* Consult the release documentation for your implementation to see if any
81
* other algorithms are supported.
82
*
83
* @author Jan Luehe
84
*
85
*
86
* @see AlgorithmParameters
87
* @see java.security.spec.AlgorithmParameterSpec
88
*
89
* @since 1.2
90
*/
91
92
public class AlgorithmParameterGenerator {
93
94
// The provider
95
private Provider provider;
96
97
// The provider implementation (delegate)
98
private AlgorithmParameterGeneratorSpi paramGenSpi;
99
100
// The algorithm
101
private String algorithm;
102
103
/**
104
* Creates an AlgorithmParameterGenerator object.
105
*
106
* @param paramGenSpi the delegate
107
* @param provider the provider
108
* @param algorithm the algorithm
109
*/
110
protected AlgorithmParameterGenerator
111
(AlgorithmParameterGeneratorSpi paramGenSpi, Provider provider,
112
String algorithm) {
113
this.paramGenSpi = paramGenSpi;
114
this.provider = provider;
115
this.algorithm = algorithm;
116
}
117
118
/**
119
* Returns the standard name of the algorithm this parameter
120
* generator is associated with.
121
*
122
* @return the string name of the algorithm.
123
*/
124
public final String getAlgorithm() {
125
return this.algorithm;
126
}
127
128
/**
129
* Returns an AlgorithmParameterGenerator object for generating
130
* a set of parameters to be used with the specified algorithm.
131
*
132
* <p> This method traverses the list of registered security Providers,
133
* starting with the most preferred Provider.
134
* A new AlgorithmParameterGenerator object encapsulating the
135
* AlgorithmParameterGeneratorSpi implementation from the first
136
* Provider that supports the specified algorithm is returned.
137
*
138
* <p> Note that the list of registered providers may be retrieved via
139
* the {@link Security#getProviders() Security.getProviders()} method.
140
*
141
* @param algorithm the name of the algorithm this
142
* parameter generator is associated with.
143
* See the AlgorithmParameterGenerator section in the <a href=
144
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
145
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
146
* for information about standard algorithm names.
147
*
148
* @return the new AlgorithmParameterGenerator object.
149
*
150
* @exception NoSuchAlgorithmException if no Provider supports an
151
* AlgorithmParameterGeneratorSpi implementation for the
152
* specified algorithm.
153
*
154
* @see Provider
155
*/
156
public static AlgorithmParameterGenerator getInstance(String algorithm)
157
throws NoSuchAlgorithmException {
158
try {
159
Object[] objs = Security.getImpl(algorithm,
160
"AlgorithmParameterGenerator",
161
(String)null);
162
return new AlgorithmParameterGenerator
163
((AlgorithmParameterGeneratorSpi)objs[0],
164
(Provider)objs[1],
165
algorithm);
166
} catch(NoSuchProviderException e) {
167
throw new NoSuchAlgorithmException(algorithm + " not found");
168
}
169
}
170
171
/**
172
* Returns an AlgorithmParameterGenerator object for generating
173
* a set of parameters to be used with the specified algorithm.
174
*
175
* <p> A new AlgorithmParameterGenerator object encapsulating the
176
* AlgorithmParameterGeneratorSpi implementation from the specified provider
177
* is returned. The specified provider must be registered
178
* in the security provider list.
179
*
180
* <p> Note that the list of registered providers may be retrieved via
181
* the {@link Security#getProviders() Security.getProviders()} method.
182
*
183
* @param algorithm the name of the algorithm this
184
* parameter generator is associated with.
185
* See the AlgorithmParameterGenerator section in the <a href=
186
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
187
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
188
* for information about standard algorithm names.
189
*
190
* @param provider the string name of the Provider.
191
*
192
* @return the new AlgorithmParameterGenerator object.
193
*
194
* @exception NoSuchAlgorithmException if an AlgorithmParameterGeneratorSpi
195
* implementation for the specified algorithm is not
196
* available from the specified provider.
197
*
198
* @exception NoSuchProviderException if the specified provider is not
199
* registered in the security provider list.
200
*
201
* @exception IllegalArgumentException if the provider name is null
202
* or empty.
203
*
204
* @see Provider
205
*/
206
public static AlgorithmParameterGenerator getInstance(String algorithm,
207
String provider)
208
throws NoSuchAlgorithmException, NoSuchProviderException
209
{
210
if (provider == null || provider.length() == 0)
211
throw new IllegalArgumentException("missing provider");
212
Object[] objs = Security.getImpl(algorithm,
213
"AlgorithmParameterGenerator",
214
provider);
215
return new AlgorithmParameterGenerator
216
((AlgorithmParameterGeneratorSpi)objs[0], (Provider)objs[1],
217
algorithm);
218
}
219
220
/**
221
* Returns an AlgorithmParameterGenerator object for generating
222
* a set of parameters to be used with the specified algorithm.
223
*
224
* <p> A new AlgorithmParameterGenerator object encapsulating the
225
* AlgorithmParameterGeneratorSpi implementation from the specified Provider
226
* object is returned. Note that the specified Provider object
227
* does not have to be registered in the provider list.
228
*
229
* @param algorithm the string name of the algorithm this
230
* parameter generator is associated with.
231
* See the AlgorithmParameterGenerator section in the <a href=
232
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
233
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
234
* for information about standard algorithm names.
235
*
236
* @param provider the Provider object.
237
*
238
* @return the new AlgorithmParameterGenerator object.
239
*
240
* @exception NoSuchAlgorithmException if an AlgorithmParameterGeneratorSpi
241
* implementation for the specified algorithm is not available
242
* from the specified Provider object.
243
*
244
* @exception IllegalArgumentException if the specified provider is null.
245
*
246
* @see Provider
247
*
248
* @since 1.4
249
*/
250
public static AlgorithmParameterGenerator getInstance(String algorithm,
251
Provider provider)
252
throws NoSuchAlgorithmException
253
{
254
if (provider == null)
255
throw new IllegalArgumentException("missing provider");
256
Object[] objs = Security.getImpl(algorithm,
257
"AlgorithmParameterGenerator",
258
provider);
259
return new AlgorithmParameterGenerator
260
((AlgorithmParameterGeneratorSpi)objs[0], (Provider)objs[1],
261
algorithm);
262
}
263
264
/**
265
* Returns the provider of this algorithm parameter generator object.
266
*
267
* @return the provider of this algorithm parameter generator object
268
*/
269
public final Provider getProvider() {
270
return this.provider;
271
}
272
273
/**
274
* Initializes this parameter generator for a certain size.
275
* To create the parameters, the {@code SecureRandom}
276
* implementation of the highest-priority installed provider is used as
277
* the source of randomness.
278
* (If none of the installed providers supply an implementation of
279
* {@code SecureRandom}, a system-provided source of randomness is
280
* used.)
281
*
282
* @param size the size (number of bits).
283
*/
284
public final void init(int size) {
285
paramGenSpi.engineInit(size, new SecureRandom());
286
}
287
288
/**
289
* Initializes this parameter generator for a certain size and source
290
* of randomness.
291
*
292
* @param size the size (number of bits).
293
* @param random the source of randomness.
294
*/
295
public final void init(int size, SecureRandom random) {
296
paramGenSpi.engineInit(size, random);
297
}
298
299
/**
300
* Initializes this parameter generator with a set of algorithm-specific
301
* parameter generation values.
302
* To generate the parameters, the {@code SecureRandom}
303
* implementation of the highest-priority installed provider is used as
304
* the source of randomness.
305
* (If none of the installed providers supply an implementation of
306
* {@code SecureRandom}, a system-provided source of randomness is
307
* used.)
308
*
309
* @param genParamSpec the set of algorithm-specific parameter generation values.
310
*
311
* @exception InvalidAlgorithmParameterException if the given parameter
312
* generation values are inappropriate for this parameter generator.
313
*/
314
public final void init(AlgorithmParameterSpec genParamSpec)
315
throws InvalidAlgorithmParameterException {
316
paramGenSpi.engineInit(genParamSpec, new SecureRandom());
317
}
318
319
/**
320
* Initializes this parameter generator with a set of algorithm-specific
321
* parameter generation values.
322
*
323
* @param genParamSpec the set of algorithm-specific parameter generation values.
324
* @param random the source of randomness.
325
*
326
* @exception InvalidAlgorithmParameterException if the given parameter
327
* generation values are inappropriate for this parameter generator.
328
*/
329
public final void init(AlgorithmParameterSpec genParamSpec,
330
SecureRandom random)
331
throws InvalidAlgorithmParameterException {
332
paramGenSpi.engineInit(genParamSpec, random);
333
}
334
335
/**
336
* Generates the parameters.
337
*
338
* @return the new AlgorithmParameters object.
339
*/
340
public final AlgorithmParameters generateParameters() {
341
return paramGenSpi.engineGenerateParameters();
342
}
343
}
344
345