package javax.crypto; import java.security.InvalidKeyException; import java.security.spec.KeySpec; import java.security.spec.InvalidKeySpecException; /** * This class defines the Service Provider Interface (SPI) * for the SecretKeyFactory class. * All the abstract methods in this class must be implemented by each * cryptographic service provider who wishes to supply the implementation * of a secret-key factory for a particular algorithm. *

* A provider should document all the key specifications supported by its * secret key factory. * For example, the DES secret-key factory supplied by the "SunJCE" provider * supports DESKeySpec as a transparent representation of DES * keys, and that provider's secret-key factory for Triple DES keys supports * DESedeKeySpec as a transparent representation of Triple DES * keys. * * @see SecretKey * @see javax.crypto.spec.DESKeySpec * @see javax.crypto.spec.DESedeKeySpec */ public abstract class SecretKeyFactorySpi { public SecretKeyFactorySpi() { } /** * Generates a SecretKey object from the * provided key specification (key material). * * @param keySpec the specification (key material) of the secret key * @return the secret key * @exception InvalidKeySpecException if the given key specification * is inappropriate for this secret-key factory to produce a secret key. */ protected abstract SecretKey engineGenerateSecret( KeySpec keySpec) throws InvalidKeySpecException; /** * Returns a specification (key material) of the given key object in the requested format. * * @param key the key * @param keySpec the requested format in which the key material shall be returned * @return the underlying key specification (key material) in the requested format * @exception InvalidKeySpecException if the requested key specification is inappropriate for * the given key (e.g., the algorithms associated with key and keySpec do * not match, or key references a key on a cryptographic hardware device whereas * keySpec is the specification of a software-based key), or the given key cannot be * dealt with (e.g., the given key has an algorithm or format not supported by this secret-key factory). */ protected abstract KeySpec engineGetKeySpec( SecretKey key, Class keySpec) throws InvalidKeySpecException; /** * Translates a key object, whose provider may be unknown or potentially untrusted, into a * corresponding key object of this secret-key factory. * * @param key the key whose provider is unknown or untrusted * @return InvalidKeyException if the given key cannot be processed by this secret-key factory. */ protected abstract SecretKey engineTranslateKey( SecretKey key) throws InvalidKeyException; }