/* * @(#)KeyFactorySpi.java 1.12 04/05/05 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.security; import java.security.spec.KeySpec; import java.security.spec.InvalidKeySpecException; /** * This class defines the Service Provider Interface (SPI) * for the KeyFactory class. * All the abstract methods in this class must be implemented by each * cryptographic service provider who wishes to supply the implementation * of a key factory for a particular algorithm. * *

Key factories are used to convert keys (opaque * cryptographic keys of type Key) into key specifications * (transparent representations of the underlying key material), and vice * versa. * *

Key factories are bi-directional. That is, they allow you to build an * opaque key object from a given key specification (key material), or to * retrieve the underlying key material of a key object in a suitable format. * *

Multiple compatible key specifications may exist for the same key. * For example, a DSA public key may be specified using * DSAPublicKeySpec or * X509EncodedKeySpec. A key factory can be used to translate * between compatible key specifications. * *

A provider should document all the key specifications supported by its * key factory. * * @author Jan Luehe * * @version 1.12, 05/05/04 * * @see KeyFactory * @see Key * @see PublicKey * @see PrivateKey * @see java.security.spec.KeySpec * @see java.security.spec.DSAPublicKeySpec * @see java.security.spec.X509EncodedKeySpec * * @since 1.2 */ public abstract class KeyFactorySpi { /** * Generates a public key object from the provided key * specification (key material). * * @param keySpec the specification (key material) of the public key. * * @return the public key. * * @exception InvalidKeySpecException if the given key specification * is inappropriate for this key factory to produce a public key. */ protected abstract PublicKey engineGeneratePublic(KeySpec keySpec) throws InvalidKeySpecException; /** * Generates a private key object from the provided key * specification (key material). * * @param keySpec the specification (key material) of the private key. * * @return the private key. * * @exception InvalidKeySpecException if the given key specification * is inappropriate for this key factory to produce a private key. */ protected abstract PrivateKey engineGeneratePrivate(KeySpec keySpec) throws InvalidKeySpecException; /** * Returns a specification (key material) of the given key * object. * keySpec identifies the specification class in which * the key material should be returned. It could, for example, be * DSAPublicKeySpec.class, to indicate that the * key material should be returned in an instance of the * DSAPublicKeySpec class. * * @param key the key. * * @param keySpec the specification class in which * the key material should be returned. * * @return the underlying key specification (key material) in an instance * of the requested specification class. * @exception InvalidKeySpecException if the requested key specification is * inappropriate for the given key, or the given key cannot be dealt with * (e.g., the given key has an unrecognized format). */ protected abstract T engineGetKeySpec(Key key, Class keySpec) throws InvalidKeySpecException; /** * Translates a key object, whose provider may be unknown or * potentially untrusted, into a corresponding key object of this key * factory. * * @param key the key whose provider is unknown or untrusted. * * @return the translated key. * * @exception InvalidKeyException if the given key cannot be processed * by this key factory. */ protected abstract Key engineTranslateKey(Key key) throws InvalidKeyException; }