diff options
Diffstat (limited to 'libraries/spongycastle/jce/src/main/java/javax/crypto/SecretKeyFactorySpi.java')
-rw-r--r-- | libraries/spongycastle/jce/src/main/java/javax/crypto/SecretKeyFactorySpi.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/libraries/spongycastle/jce/src/main/java/javax/crypto/SecretKeyFactorySpi.java b/libraries/spongycastle/jce/src/main/java/javax/crypto/SecretKeyFactorySpi.java new file mode 100644 index 000000000..b430f3bd3 --- /dev/null +++ b/libraries/spongycastle/jce/src/main/java/javax/crypto/SecretKeyFactorySpi.java @@ -0,0 +1,72 @@ +package javax.crypto; + +import java.security.InvalidKeyException; +import java.security.spec.KeySpec; +import java.security.spec.InvalidKeySpecException; + +/** + * This class defines the <i>Service Provider Interface</i> (<b>SPI</b>) + * for the <code>SecretKeyFactory</code> 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. + * <p> + * 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 <code>DESKeySpec</code> as a transparent representation of DES + * keys, and that provider's secret-key factory for Triple DES keys supports + * <code>DESedeKeySpec</code> 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 <code>SecretKey</code> 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 <code>key</code> and <code>keySpec</code> do + * not match, or <code>key</code> references a key on a cryptographic hardware device whereas + * <code>keySpec</code> 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; +} |