aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/jce/src/main/java/javax/crypto/SecretKeyFactorySpi.java
diff options
context:
space:
mode:
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.java72
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;
+}