1 /*
2 * Copyright 1997-1999 Sun Microsystems, Inc. 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. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26 package java.security;
27
28 import java.security.spec.AlgorithmParameterSpec;
29
30 /**
31 * <p> This class defines the <i>Service Provider Interface</i> (<b>SPI</b>)
32 * for the <code>KeyPairGenerator</code> class, which is used to generate
33 * pairs of public and private keys.
34 *
35 * <p> All the abstract methods in this class must be implemented by each
36 * cryptographic service provider who wishes to supply the implementation
37 * of a key pair generator for a particular algorithm.
38 *
39 * <p> In case the client does not explicitly initialize the KeyPairGenerator
40 * (via a call to an <code>initialize</code> method), each provider must
41 * supply (and document) a default initialization.
42 * For example, the <i>Sun</i> provider uses a default modulus size (keysize)
43 * of 1024 bits.
44 *
45 * @author Benjamin Renaud
46 *
47 *
48 * @see KeyPairGenerator
49 * @see java.security.spec.AlgorithmParameterSpec
50 */
51
52 public abstract class KeyPairGeneratorSpi {
53
54 /**
55 * Initializes the key pair generator for a certain keysize, using
56 * the default parameter set.
57 *
58 * @param keysize the keysize. This is an
59 * algorithm-specific metric, such as modulus length, specified in
60 * number of bits.
61 *
62 * @param random the source of randomness for this generator.
63 *
64 * @exception InvalidParameterException if the <code>keysize</code> is not
65 * supported by this KeyPairGeneratorSpi object.
66 */
67 public abstract void initialize(int keysize, SecureRandom random);
68
69 /**
70 * Initializes the key pair generator using the specified parameter
71 * set and user-provided source of randomness.
72 *
73 * <p>This concrete method has been added to this previously-defined
74 * abstract class. (For backwards compatibility, it cannot be abstract.)
75 * It may be overridden by a provider to initialize the key pair
76 * generator. Such an override
77 * is expected to throw an InvalidAlgorithmParameterException if
78 * a parameter is inappropriate for this key pair generator.
79 * If this method is not overridden, it always throws an
80 * UnsupportedOperationException.
81 *
82 * @param params the parameter set used to generate the keys.
83 *
84 * @param random the source of randomness for this generator.
85 *
86 * @exception InvalidAlgorithmParameterException if the given parameters
87 * are inappropriate for this key pair generator.
88 *
89 * @since 1.2
90 */
91 public void initialize(AlgorithmParameterSpec params,
92 SecureRandom random)
93 throws InvalidAlgorithmParameterException {
94 throw new UnsupportedOperationException();
95 }
96
97 /**
98 * Generates a key pair. Unless an initialization method is called
99 * using a KeyPairGenerator interface, algorithm-specific defaults
100 * will be used. This will generate a new key pair every time it
101 * is called.
102 *
103 * @return the newly generated <tt>KeyPair</tt>
104 */
105 public abstract KeyPair generateKeyPair();
106 }