aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/jce/src/main/java/javax/crypto/CipherSpi.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/jce/src/main/java/javax/crypto/CipherSpi.java')
-rw-r--r--libraries/spongycastle/jce/src/main/java/javax/crypto/CipherSpi.java606
1 files changed, 0 insertions, 606 deletions
diff --git a/libraries/spongycastle/jce/src/main/java/javax/crypto/CipherSpi.java b/libraries/spongycastle/jce/src/main/java/javax/crypto/CipherSpi.java
deleted file mode 100644
index 09ff01e2c..000000000
--- a/libraries/spongycastle/jce/src/main/java/javax/crypto/CipherSpi.java
+++ /dev/null
@@ -1,606 +0,0 @@
-package javax.crypto;
-
-import java.security.Key;
-import java.security.SecureRandom;
-import java.security.InvalidKeyException;
-import java.security.AlgorithmParameters;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.spec.AlgorithmParameterSpec;
-
-/**
- * This class defines the <i>Service Provider Interface</i> (<b>SPI</b>)
- * for the <code>Cipher</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 particular cipher algorithm.
- * <p>
- * In order to create an instance of <code>Cipher</code>, which
- * encapsulates an instance of this <code>CipherSpi</code> class, an
- * application calls one of the
- * <a href = "Cipher.html#getInstance(java.lang.String)">getInstance</a>
- * factory methods of the
- * <a href = "Cipher.html">Cipher</a> engine class and specifies the requested
- * <i>transformation</i>.
- * Optionally, the application may also specify the name of a provider.
- * <p>
- * A <i>transformation</i> is a string that describes the operation (or
- * set of operations) to be performed on the given input, to produce some
- * output. A transformation always includes the name of a cryptographic
- * algorithm (e.g., <i>DES</i>), and may be followed by a feedback mode and
- * padding scheme.
- * <p>
- * A transformation is of the form:
- * <p>
- * <ul>
- * <li>"<i>algorithm/mode/padding</i>" or
- * <p>
- * <li>"<i>algorithm</i>"
- * </ul>
- *
- * <P> (in the latter case,
- * provider-specific default values for the mode and padding scheme are used).
- * For example, the following is a valid transformation:<p>
- *
- * <pre>
- * Cipher c = Cipher.getInstance("<i>DES/CBC/PKCS5Padding</i>");
- * </pre>
- *
- * <p>A provider may supply a separate class for each combination
- * of <i>algorithm/mode/padding</i>, or may decide to provide more generic
- * classes representing sub-transformations corresponding to
- * <i>algorithm</i> or <i>algorithm/mode</i> or <i>algorithm//padding</i>
- * (note the double slashes),
- * in which case the requested mode and/or padding are set automatically by
- * the <code>getInstance</code> methods of <code>Cipher</code>, which invoke
- * the <a href = "#engineSetMode(java.lang.String)">engineSetMode</a> and
- * <a href = "#engineSetPadding(java.lang.String)">engineSetPadding</a>
- * methods of the provider's subclass of <code>CipherSpi</code>.
- *
- * <p>A <code>Cipher</code> property in a provider master class may have one of
- * the following formats:
- *
- * <ul>
- *
- * <li>
- * <pre>
- * // provider's subclass of "CipherSpi" implements "algName" with
- * // pluggable mode and padding
- * <code>Cipher.</code><i>algName</i>
- * </pre>
- *
- * <li>
- * <pre>
- * // provider's subclass of "CipherSpi" implements "algName" in the
- * // specified "mode", with pluggable padding
- * <code>Cipher.</code><i>algName/mode</i>
- * </pre>
- *
- * <li>
- * <pre>
- * // provider's subclass of "CipherSpi" implements "algName" with the
- * // specified "padding", with pluggable mode
- * <code>Cipher.</code><i>algName//padding</i>
- * </pre>
- *
- * <li>
- * <pre>
- * // provider's subclass of "CipherSpi" implements "algName" with the
- * // specified "mode" and "padding"
- * <code>Cipher.</code><i>algName/mode/padding</i>
- * </pre>
- *
- * </ul>
- *
- * <p>For example, a provider may supply a subclass of <code>CipherSpi</code>
- * that implements <i>DES/ECB/PKCS5Padding</i>, one that implements
- * <i>DES/CBC/PKCS5Padding</i>, one that implements
- * <i>DES/CFB/PKCS5Padding</i>, and yet another one that implements
- * <i>DES/OFB/PKCS5Padding</i>. That provider would have the following
- * <code>Cipher</code> properties in its master class:<p>
- *
- * <ul>
- *
- * <li>
- * <pre>
- * <code>Cipher.</code><i>DES/ECB/PKCS5Padding</i>
- * </pre>
- *
- * <li>
- * <pre>
- * <code>Cipher.</code><i>DES/CBC/PKCS5Padding</i>
- * </pre>
- *
- * <li>
- * <pre>
- * <code>Cipher.</code><i>DES/CFB/PKCS5Padding</i>
- * </pre>
- *
- * <li>
- * <pre>
- * <code>Cipher.</code><i>DES/OFB/PKCS5Padding</i>
- * </pre>
- *
- * </ul>
- *
- * <p>Another provider may implement a class for each of the above modes
- * (i.e., one class for <i>ECB</i>, one for <i>CBC</i>, one for <i>CFB</i>,
- * and one for <i>OFB</i>), one class for <i>PKCS5Padding</i>,
- * and a generic <i>DES</i> class that subclasses from <code>CipherSpi</code>.
- * That provider would have the following
- * <code>Cipher</code> properties in its master class:<p>
- *
- * <ul>
- *
- * <li>
- * <pre>
- * <code>Cipher.</code><i>DES</i>
- * </pre>
- *
- * </ul>
- *
- * <p>The <code>getInstance</code> factory method of the <code>Cipher</code>
- * engine class follows these rules in order to instantiate a provider's
- * implementation of <code>CipherSpi</code> for a
- * transformation of the form "<i>algorithm</i>":
- *
- * <ol>
- * <li>
- * Check if the provider has registered a subclass of <code>CipherSpi</code>
- * for the specified "<i>algorithm</i>".
- * <p>If the answer is YES, instantiate this
- * class, for whose mode and padding scheme default values (as supplied by
- * the provider) are used.
- * <p>If the answer is NO, throw a <code>NoSuchAlgorithmException</code>
- * exception.
- * </ol>
- *
- * <p>The <code>getInstance</code> factory method of the <code>Cipher</code>
- * engine class follows these rules in order to instantiate a provider's
- * implementation of <code>CipherSpi</code> for a
- * transformation of the form "<i>algorithm/mode/padding</i>":
- *
- * <ol>
- * <li>
- * Check if the provider has registered a subclass of <code>CipherSpi</code>
- * for the specified "<i>algorithm/mode/padding</i>" transformation.
- * <p>If the answer is YES, instantiate it.
- * <p>If the answer is NO, go to the next step.<p>
- * <li>
- * Check if the provider has registered a subclass of <code>CipherSpi</code>
- * for the sub-transformation "<i>algorithm/mode</i>".
- * <p>If the answer is YES, instantiate it, and call
- * <code>engineSetPadding(<i>padding</i>)</code> on the new instance.
- * <p>If the answer is NO, go to the next step.<p>
- * <li>
- * Check if the provider has registered a subclass of <code>CipherSpi</code>
- * for the sub-transformation "<i>algorithm//padding</i>" (note the double
- * slashes).
- * <p>If the answer is YES, instantiate it, and call
- * <code>engineSetMode(<i>mode</i>)</code> on the new instance.
- * <p>If the answer is NO, go to the next step.<p>
- * <li>
- * Check if the provider has registered a subclass of <code>CipherSpi</code>
- * for the sub-transformation "<i>algorithm</i>".
- * <p>If the answer is YES, instantiate it, and call
- * <code>engineSetMode(<i>mode</i>)</code> and
- * <code>engineSetPadding(<i>padding</i>)</code> on the new instance.
- * <p>If the answer is NO, throw a <code>NoSuchAlgorithmException</code>
- * exception.
- * </ol>
- *
- * @see KeyGenerator
- * @see SecretKey
- */
-public abstract class CipherSpi
-{
- public CipherSpi()
- {
- }
-
- /**
- * Sets the mode of this cipher.
- *
- * @param mode the cipher mode
- * @exception NoSuchAlgorithmException if the requested cipher mode does not exist
- */
- protected abstract void engineSetMode(
- String mode)
- throws NoSuchAlgorithmException;
-
- /**
- * Sets the padding mechanism of this cipher.
- *
- * @param padding the padding mechanism
- * @exception NoSuchPaddingException if the requested padding mechanism does not exist
- */
- protected abstract void engineSetPadding(
- String padding)
- throws NoSuchPaddingException;
-
- /**
- * Returns the block size (in bytes).
- *
- * @return the block size (in bytes), or 0 if the underlying algorithm is not a block cipher
- */
- protected abstract int engineGetBlockSize();
-
- /**
- * Returns the length in bytes that an output buffer would
- * need to be in order to hold the result of the next <code>update</code>
- * or <code>doFinal</code> operation, given the input length
- * <code>inputLen</code> (in bytes).
- * <p>
- * This call takes into account any unprocessed (buffered) data from a
- * previous <code>update</code> call, and padding.
- * <p>
- * The actual output length of the next <code>update</code> or
- * <code>doFinal</code> call may be smaller than the length returned by
- * this method.
- *
- * @param inputLen the input length (in bytes)
- * @return the required output buffer size (in bytes)
- */
- protected abstract int engineGetOutputSize(
- int inputLen);
-
- /**
- * Returns the initialization vector (IV) in a new buffer.
- * <p>
- * This is useful in the context of password-based encryption or
- * decryption, where the IV is derived from a user-provided passphrase.
- *
- * @return the initialization vector in a new buffer, or null if the
- * underlying algorithm does not use an IV, or if the IV has not yet
- * been set.
- */
- protected abstract byte[] engineGetIV();
-
- /**
- * Returns the parameters used with this cipher.
- * <p>
- * The returned parameters may be the same that were used to initialize
- * this cipher, or may contain a combination of default and random
- * parameter values used by the underlying cipher implementation if this
- * cipher requires algorithm parameters but was not initialized with any.
- *
- * @return the parameters used with this cipher, or null if this cipher
- * does not use any parameters.
- */
- protected abstract AlgorithmParameters engineGetParameters();
-
- /**
- * Initializes this cipher with a key and a source
- * of randomness.
- * <p>
- * The cipher is initialized for one of the following four operations:
- * encryption, decryption, key wrapping or key unwrapping, depending on
- * the value of <code>opmode</code>.
- * <p>
- * If this cipher requires any algorithm parameters that cannot be
- * derived from the given <code>key</code>, the underlying cipher
- * implementation is supposed to generate the required parameters itself
- * (using provider-specific default or random values) if it is being
- * initialized for encryption or key wrapping, and raise an
- * <code>InvalidKeyException</code> if it is being
- * initialized for decryption or key unwrapping.
- * The generated parameters can be retrieved using
- * <a href = "#engineGetParameters()">engineGetParameters</a> or
- * <a href = "#engineGetIV()">engineGetIV</a> (if the parameter is an IV).
- * <p>
- * If this cipher (including its underlying feedback or padding scheme)
- * requires any random bytes (e.g., for parameter generation), it will get
- * them from <code>random</code>.
- *
- * <p>Note that when a Cipher object is initialized, it loses all
- * previously-acquired state. In other words, initializing a Cipher is
- * equivalent to creating a new instance of that Cipher and initializing
- * it.
- * @param opmode the operation mode of this cipher (this is one of
- * the following:
- * <code>ENCRYPT_MODE</code>, <code>DECRYPT_MODE</code>,
- * <code>WRAP_MODE</code> or <code>UNWRAP_MODE</code>)
- * @param key the encryption key
- * @param random the source of randomness
- * @exception InvalidKeyException if the given key is inappropriate for
- * initializing this cipher, or if this cipher is being initialized for
- * decryption and requires algorithm parameters that cannot be
- * determined from the given key.
- */
- protected abstract void engineInit(
- int opmode,
- Key key,
- SecureRandom random)
- throws InvalidKeyException;
-
- /**
- * Initializes this cipher with a key, a set of
- * algorithm parameters, and a source of randomness.
- * <p>
- * The cipher is initialized for one of the following four operations:
- * encryption, decryption, key wrapping or key unwrapping, depending on
- * the value of <code>opmode</code>.
- * <p>
- * If this cipher requires any algorithm parameters and
- * <code>params</code> is null, the underlying cipher implementation is
- * supposed to generate the required parameters itself (using
- * provider-specific default or random values) if it is being
- * initialized for encryption or key wrapping, and raise an
- * <code>InvalidAlgorithmParameterException</code> if it is being
- * initialized for decryption or key unwrapping.
- * The generated parameters can be retrieved using
- * <a href = "#engineGetParameters()">engineGetParameters</a> or
- * <a href = "#engineGetIV()">engineGetIV</a> (if the parameter is an IV).
- * <p>
- * If this cipher (including its underlying feedback or padding scheme)
- * requires any random bytes (e.g., for parameter generation), it will get
- * them from <code>random</code>.
- * <p>
- * Note that when a Cipher object is initialized, it loses all
- * previously-acquired state. In other words, initializing a Cipher is
- * equivalent to creating a new instance of that Cipher and initializing
- * it.
- *
- * @param opmode the operation mode of this cipher (this is one of the following:
- * <code>ENCRYPT_MODE</code>, <code>DECRYPT_MODE</code>,
- * <code>WRAP_MODE</code> or <code>UNWRAP_MODE</code>)
- * @param key the encryption key
- * @param params the algorithm parameters
- * @param random the source of randomness
- * @exception InvalidKeyException if the given key is inappropriate for initializing this cipher
- * @exception InvalidAlgorithmParameterException if the given algorithm parameters are inappropriate
- * for this cipher, or if this cipher is being initialized for decryption and requires
- * algorithm parameters and <code>params</code> is null.
- */
- protected abstract void engineInit(
- int opmode,
- Key key,
- AlgorithmParameterSpec params,
- SecureRandom random)
- throws InvalidKeyException, InvalidAlgorithmParameterException;
-
- /**
- * Initializes this cipher with a key, a set of
- * algorithm parameters, and a source of randomness.
- * <p>
- * The cipher is initialized for one of the following four operations:
- * encryption, decryption, key wrapping or key unwrapping, depending on
- * the value of <code>opmode</code>.
- * <p>
- * If this cipher requires any algorithm parameters and
- * <code>params</code> is null, the underlying cipher implementation is
- * supposed to generate the required parameters itself (using
- * provider-specific default or random values) if it is being
- * initialized for encryption or key wrapping, and raise an
- * <code>InvalidAlgorithmParameterException</code> if it is being
- * initialized for decryption or key unwrapping.
- * The generated parameters can be retrieved using
- * <a href = "#engineGetParameters()">engineGetParameters</a> or
- * <a href = "#engineGetIV()">engineGetIV</a> (if the parameter is an IV).
- * <p>
- * If this cipher (including its underlying feedback or padding scheme)
- * requires any random bytes (e.g., for parameter generation), it will get
- * them from <code>random</code>.
- * <p>
- * Note that when a Cipher object is initialized, it loses all
- * previously-acquired state. In other words, initializing a Cipher is
- * equivalent to creating a new instance of that Cipher and initializing it.
- *
- * @param opmode the operation mode of this cipher (this is one of the following:
- * <code>ENCRYPT_MODE</code>, <code>DECRYPT_MODE</code>, <code>WRAP_MODE</code>
- * or <code>UNWRAP_MODE</code>)
- * @param key the encryption key
- * @param params the algorithm parameters
- * @param random the source of randomness
- * @exception InvalidKeyException if the given key is inappropriate for initializing this cipher
- * @exception InvalidAlgorithmParameterException if the given algorithm parameters are inappropriate
- * for this cipher, or if this cipher is being initialized for decryption and requires
- * algorithm parameters and <code>params</code> is null.
- */
- protected abstract void engineInit(
- int opmode,
- Key key,
- AlgorithmParameters params,
- SecureRandom random)
- throws InvalidKeyException, InvalidAlgorithmParameterException;
-
- /**
- * Continues a multiple-part encryption or decryption operation
- * (depending on how this cipher was initialized), processing another data
- * part.
- * <p>
- * The first <code>inputLen</code> bytes in the <code>input</code>
- * buffer, starting at <code>inputOffset</code> inclusive, are processed,
- * and the result is stored in a new buffer.
- *
- * @param input the input buffer
- * @param inputOffset the offset in <code>input</code> where the input starts
- * @param inputLen the input length
- * @return the new buffer with the result, or null if the underlying cipher is a
- * block cipher and the input data is too short to result in a new block.
- */
- protected abstract byte[] engineUpdate(
- byte[] input,
- int inputOffset,
- int inputLen);
-
- /**
- * Continues a multiple-part encryption or decryption operation
- * (depending on how this cipher was initialized), processing another data
- * part.
- * <p>
- * The first <code>inputLen</code> bytes in the <code>input</code>
- * buffer, starting at <code>inputOffset</code> inclusive, are processed,
- * and the result is stored in the <code>output</code> buffer, starting at
- * <code>outputOffset</code> inclusive.
- * <p>
- * If the <code>output</code> buffer is too small to hold the result,
- * a <code>ShortBufferException</code> is thrown.
- *
- * @param input the input buffer
- * @param inputOffset the offset in <code>input</code> where the input starts
- * @param inputLen the input length
- * @param output the buffer for the result
- * @param outputOffset the offset in <code>output</code> where the result is stored
- * @return the number of bytes stored in <code>output</code>
- * @exception ShortBufferException if the given output buffer is too small to hold the result
- */
- protected abstract int engineUpdate(
- byte[] input,
- int inputOffset,
- int inputLen,
- byte[] output,
- int outputOffset)
- throws ShortBufferException;
-
- /**
- * Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation.
- * The data is encrypted or decrypted, depending on how this cipher was initialized.
- * <p>
- * The first <code>inputLen</code> bytes in the <code>input</code>
- * buffer, starting at <code>inputOffset</code> inclusive, and any input
- * bytes that may have been buffered during a previous <code>update</code>
- * operation, are processed, with padding (if requested) being applied.
- * The result is stored in a new buffer.
- * <p>
- * A call to this method resets this cipher object to the state
- * it was in when previously initialized via a call to <code>engineInit</code>.
- * That is, the object is reset and available to encrypt or decrypt
- * (depending on the operation mode that was specified in the call to
- * <code>engineInit</code>) more data.
- *
- * @param input the input buffer
- * @param inputOffset the offset in <code>input</code> where the input starts
- * @param inputLen the input length
- * @return the new buffer with the result
- * @exception IllegalBlockSizeException if this cipher is a block cipher, no padding has been requested
- * (only in encryption mode), and the total input length of the data processed by this cipher is not a
- * multiple of block size
- * @exception BadPaddingException if this cipher is in decryption mode, and (un)padding has been requested,
- * but the decrypted data is not bounded by the appropriate padding bytes
- */
- protected abstract byte[] engineDoFinal(
- byte[] input,
- int inputOffset,
- int inputLen)
- throws IllegalBlockSizeException, BadPaddingException;
-
- /**
- * Encrypts or decrypts data in a single-part operation,
- * or finishes a multiple-part operation.
- * The data is encrypted or decrypted, depending on how this cipher was
- * initialized.
- * <p>
- * The first <code>inputLen</code> bytes in the <code>input</code>
- * buffer, starting at <code>inputOffset</code> inclusive, and any input
- * bytes that may have been buffered during a previous <code>update</code>
- * operation, are processed, with padding (if requested) being applied.
- * The result is stored in the <code>output</code> buffer, starting at
- * <code>outputOffset</code> inclusive.
- * <p>
- * If the <code>output</code> buffer is too small to hold the result,
- * a <code>ShortBufferException</code> is thrown.
- * <p>
- * A call to this method resets this cipher object to the state
- * it was in when previously initialized via a call to
- * <code>engineInit</code>.
- * That is, the object is reset and available to encrypt or decrypt
- * (depending on the operation mode that was specified in the call to
- * <code>engineInit</code>) more data.
- *
- * @param input the input buffer
- * @param inputOffset the offset in <code>input</code> where the input starts
- * @param inputLen the input length
- * @param output the buffer for the result
- * @param outputOffset the offset in <code>output</code> where the result is stored
- * @return the number of bytes stored in <code>output</code>
- * @exception IllegalBlockSizeException if this cipher is a block cipher, no padding has been
- * requested (only in encryption mode), and the total input length of the data processed by this
- * cipher is not a multiple of block size
- * @exception ShortBufferException if the given output buffer is too small to hold the result
- * @exception BadPaddingException if this cipher is in decryption mode, and (un)padding has been requested,
- * but the decrypted data is not bounded by the appropriate padding bytes
- */
- protected abstract int engineDoFinal(
- byte[] input,
- int inputOffset,
- int inputLen,
- byte[] output,
- int outputOffset)
- throws ShortBufferException, IllegalBlockSizeException, BadPaddingException;
-
- /**
- * Wrap a key.
- * <p>
- * This concrete method has been added to this previously-defined
- * abstract class. (For backwards compatibility, it cannot be abstract.)
- * It may be overridden by a provider to wrap a key.
- * Such an override is expected to throw an IllegalBlockSizeException or
- * InvalidKeyException (under the specified circumstances),
- * if the given key cannot be wrapped.
- * If this method is not overridden, it always throws an
- * UnsupportedOperationException.
- *
- * @param key the key to be wrapped.
- * @return the wrapped key.
- * @exception IllegalBlockSizeException if this cipher is a block cipher, no padding has been requested,
- * and the length of the encoding of the key to be wrapped is not a multiple of the block size.
- * @exception InvalidKeyException if it is impossible or unsafe to wrap the key with this cipher (e.g.,
- * a hardware protected key is being passed to a software-only cipher).
- */
- protected byte[] engineWrap(
- Key key)
- throws IllegalBlockSizeException, InvalidKeyException
- {
- throw new UnsupportedOperationException("Underlying cipher does not support key wrapping");
- }
-
- /**
- * Unwrap a previously wrapped key.
- *
- * <p>This concrete method has been added to this previously-defined
- * abstract class. (For backwards compatibility, it cannot be abstract.)
- * It may be overridden by a provider to unwrap a previously wrapped key.
- * Such an override is expected to throw an InvalidKeyException if
- * the given wrapped key cannot be unwrapped.
- * If this method is not overridden, it always throws an
- * UnsupportedOperationException.
- *
- * @param wrappedKey the key to be unwrapped.
- * @param wrappedKeyAlgorithm the algorithm associated with the wrapped key.
- * @param wrappedKeyType the type of the wrapped key. This is one of <code>SECRET_KEY</code>,
- * <code>PRIVATE_KEY</code>, or <code>PUBLIC_KEY</code>.
- * @return the unwrapped key.
- * @exception InvalidKeyException if <code>wrappedKey</code> does not represent a wrapped key,
- * or if the algorithm associated with the wrapped key is different from <code>wrappedKeyAlgorithm</code>
- * and/or its key type is different from <code>wrappedKeyType</code>.
- * @exception NoSuchAlgorithmException - if no installed providers can create keys for the
- * <code>wrappedKeyAlgorithm</code>.
- */
- protected java.security.Key engineUnwrap(
- byte[] wrappedKey,
- String wrappedKeyAlgorithm,
- int wrappedKeyType)
- throws InvalidKeyException, NoSuchAlgorithmException
- {
- throw new UnsupportedOperationException("Underlying cipher does not support key unwrapping");
- }
-
- /**
- * Returns the key size of the given key object.
- * <p>
- * This concrete method has been added to this previously-defined
- * abstract class. It throws an <code>UnsupportedOperationException</code>
- * if it is not overridden by the provider.
- *
- * @param key the key object.
- * @return the key size of the given key object.
- * @exception InvalidKeyException if <code>key</code> is invalid.
- */
- protected int engineGetKeySize(
- Key key)
- throws InvalidKeyException
- {
- throw new UnsupportedOperationException("Key size unavailable");
- }
-}