History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/security/AlgorithmParameterGenerator.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/security/AlgorithmParameterGenerator.java+343−0
@@ -0,0 +1,343 @@
1+/*
2+ * Copyright (c) 1997, 2011, 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</code> 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</code> 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.<P>
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</code> 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</code> algorithms and
71+ * keysizes in parentheses:
72+ * <ul>
73+ * <li><tt>DiffieHellman</tt> (1024)</li>
74+ * <li><tt>DSA</tt> (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</code>
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</code>, 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</code>
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</code>, 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+}