001: /*
002: * @(#)KeyPairGeneratorSpi.java 1.17 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: *
026: */
027:
028: package java.security;
029:
030: import java.security.spec.AlgorithmParameterSpec;
031:
032: /**
033: * <p> This class defines the <i>Service Provider Interface</i> (<b>SPI</b>)
034: * for the <code>KeyPairGenerator</code> class, which is used to generate
035: * pairs of public and private keys.
036: *
037: * <p> All the abstract methods in this class must be implemented by each
038: * cryptographic service provider who wishes to supply the implementation
039: * of a key pair generator for a particular algorithm.
040: *
041: * <p> In case the client does not explicitly initialize the KeyPairGenerator
042: * (via a call to an <code>initialize</code> method), each provider must
043: * supply (and document) a default initialization.
044: * For example, the <i>Sun</i> provider uses a default modulus size (keysize)
045: * of 1024 bits.
046: *
047: * @author Benjamin Renaud
048: *
049: * @version 1.11, 02/02/00
050: *
051: * @see KeyPairGenerator
052: * @see java.security.spec.AlgorithmParameterSpec
053: */
054:
055: public abstract class KeyPairGeneratorSpi {
056:
057: /**
058: * Initializes the key pair generator for a certain keysize, using
059: * the default parameter set.
060: *
061: * @param keysize the keysize. This is an
062: * algorithm-specific metric, such as modulus length, specified in
063: * number of bits.
064: *
065: * @param random the source of randomness for this generator.
066: *
067: * @exception InvalidParameterException if the <code>keysize</code> is not
068: * supported by this KeyPairGeneratorSpi object.
069: */
070: public abstract void initialize(int keysize, SecureRandom random);
071:
072: /**
073: * Initializes the key pair generator using the specified parameter
074: * set and user-provided source of randomness.
075: *
076: * <p>This concrete method has been added to this previously-defined
077: * abstract class. (For backwards compatibility, it cannot be abstract.)
078: * It may be overridden by a provider to initialize the key pair
079: * generator. Such an override
080: * is expected to throw an InvalidAlgorithmParameterException if
081: * a parameter is inappropriate for this key pair generator.
082: * If this method is not overridden, it always throws an
083: * UnsupportedOperationException.
084: *
085: * @param params the parameter set used to generate the keys.
086: *
087: * @param random the source of randomness for this generator.
088: *
089: * @exception InvalidAlgorithmParameterException if the given parameters
090: * are inappropriate for this key pair generator.
091: *
092: * @since 1.2
093: */
094: public void initialize(AlgorithmParameterSpec params,
095: SecureRandom random)
096: throws InvalidAlgorithmParameterException {
097: throw new UnsupportedOperationException();
098: }
099:
100: /**
101: * Generates a key pair. Unless an initialization method is called
102: * using a KeyPairGenerator interface, algorithm-specific defaults
103: * will be used. This will generate a new key pair every time it
104: * is called.
105: *
106: * @return the newly generated <tt>KeyPair</tt>
107: */
108: public abstract KeyPair generateKeyPair();
109: }
|