aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/util/CipherSpiExt.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/util/CipherSpiExt.java')
-rw-r--r--libraries/spongycastle/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/util/CipherSpiExt.java635
1 files changed, 0 insertions, 635 deletions
diff --git a/libraries/spongycastle/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/util/CipherSpiExt.java b/libraries/spongycastle/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/util/CipherSpiExt.java
deleted file mode 100644
index 7978e2aee..000000000
--- a/libraries/spongycastle/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/util/CipherSpiExt.java
+++ /dev/null
@@ -1,635 +0,0 @@
-package org.spongycastle.pqc.jcajce.provider.util;
-
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.InvalidParameterException;
-import java.security.Key;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.spec.AlgorithmParameterSpec;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.CipherSpi;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.ShortBufferException;
-
-/**
- * The CipherSpiExt class extends CipherSpi.
- */
-public abstract class CipherSpiExt
- extends CipherSpi
-{
-
- /**
- * Constant specifying encrypt mode.
- */
- public static final int ENCRYPT_MODE = javax.crypto.Cipher.ENCRYPT_MODE;
-
- /**
- * Constant specifying decrypt mode.
- */
- public static final int DECRYPT_MODE = javax.crypto.Cipher.DECRYPT_MODE;
-
- /**
- * The operation mode for this cipher ({@link #ENCRYPT_MODE} or
- * {@link #DECRYPT_MODE}).
- */
- protected int opMode;
-
- // ****************************************************
- // JCA adapter methods
- // ****************************************************
-
- /**
- * Initialize this cipher object with a proper key and some random seed.
- * Before a cipher object is ready for data processing, it has to be
- * initialized according to the desired cryptographic operation, which is
- * specified by the <tt>opMode</tt> parameter.
- * <p/>
- * If this cipher (including its underlying mode or padding scheme) requires
- * any random bytes, it will obtain them from <tt>random</tt>.
- * <p/>
- * Note: If the mode needs an initialization vector, a blank array is used
- * in this case.
- *
- * @param opMode the operation mode ({@link #ENCRYPT_MODE} or
- * {@link #DECRYPT_MODE})
- * @param key the key
- * @param random the random seed
- * @throws java.security.InvalidKeyException if the key is inappropriate for initializing this cipher.
- */
- protected final void engineInit(int opMode, java.security.Key key,
- java.security.SecureRandom random)
- throws java.security.InvalidKeyException
- {
-
- try
- {
- engineInit(opMode, key,
- (java.security.spec.AlgorithmParameterSpec)null, random);
- }
- catch (java.security.InvalidAlgorithmParameterException e)
- {
- throw new InvalidParameterException(e.getMessage());
- }
- }
-
- /**
- * Initialize this cipher with a key, a set of algorithm parameters, and a
- * source of randomness. The cipher is initialized for encryption or
- * decryption, depending on the value of <tt>opMode</tt>.
- * <p/>
- * If this cipher (including its underlying mode or padding scheme) requires
- * any random bytes, it will obtain them from <tt>random</tt>. Note that
- * when a {@link BlockCipher} 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.
- * <p/>
- * Note: If the mode needs an initialization vector, a try to retrieve it
- * from the AlgorithmParametersSpec is made.
- *
- * @param opMode the operation mode ({@link #ENCRYPT_MODE} or
- * {@link #DECRYPT_MODE})
- * @param key the key
- * @param algParams the algorithm parameters
- * @param random the random seed
- * @throws java.security.InvalidKeyException if the key is inappropriate for initializing this block
- * cipher.
- * @throws java.security.InvalidAlgorithmParameterException if the parameters are inappropriate for initializing this
- * block cipher.
- */
- protected final void engineInit(int opMode, java.security.Key key,
- java.security.AlgorithmParameters algParams,
- java.security.SecureRandom random)
- throws java.security.InvalidKeyException,
- java.security.InvalidAlgorithmParameterException
- {
-
- // if algParams are not specified, initialize without them
- if (algParams == null)
- {
- engineInit(opMode, key, random);
- return;
- }
-
- AlgorithmParameterSpec paramSpec = null;
- // XXX getting AlgorithmParameterSpec from AlgorithmParameters
-
- engineInit(opMode, key, paramSpec, random);
- }
-
- /**
- * Initialize this cipher with a key, a set of algorithm parameters, and a
- * source of randomness. The cipher is initialized for one of the following
- * four operations: encryption, decryption, key wrapping or key unwrapping,
- * depending on the value of opMode. If this cipher (including its
- * underlying feedback or padding scheme) requires any random bytes (e.g.,
- * for parameter generation), it will get them from random. 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 ({@link #ENCRYPT_MODE} or
- * {@link #DECRYPT_MODE})
- * @param key the encryption key
- * @param params the algorithm parameters
- * @param javaRand the source of randomness
- * @throws java.security.InvalidKeyException if the given key is inappropriate for initializing this
- * cipher
- * @throws java.security.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 the
- * parameters are null.
- */
- protected void engineInit(int opMode, java.security.Key key,
- java.security.spec.AlgorithmParameterSpec params,
- java.security.SecureRandom javaRand)
- throws java.security.InvalidKeyException,
- java.security.InvalidAlgorithmParameterException
- {
-
- if ((params != null) && !(params instanceof AlgorithmParameterSpec))
- {
- throw new java.security.InvalidAlgorithmParameterException();
- }
-
- if ((key == null) || !(key instanceof Key))
- {
- throw new java.security.InvalidKeyException();
- }
-
- this.opMode = opMode;
-
- if (opMode == ENCRYPT_MODE)
- {
- SecureRandom flexiRand = javaRand;
- initEncrypt((Key)key, (AlgorithmParameterSpec)params, flexiRand);
-
- }
- else if (opMode == DECRYPT_MODE)
- {
- initDecrypt((Key)key, (AlgorithmParameterSpec)params);
-
- }
- }
-
- /**
- * Return the result of the last step of a multi-step en-/decryption
- * operation or the result of a single-step en-/decryption operation by
- * processing the given input data and any remaining buffered data. The data
- * to be processed is given in an input byte array. Beginning at
- * inputOffset, only the first inputLen bytes are en-/decrypted, including
- * any buffered bytes of a previous update operation. If necessary, padding
- * is performed. The result is returned as a output byte array.
- *
- * @param input the byte array holding the data to be processed
- * @param inOff the offset indicating the start position within the input
- * byte array
- * @param inLen the number of bytes to be processed
- * @return the byte array containing the en-/decrypted data
- * @throws javax.crypto.IllegalBlockSizeException if the ciphertext length is not a multiple of the
- * blocklength.
- * @throws javax.crypto.BadPaddingException if unpadding is not possible.
- */
- protected final byte[] engineDoFinal(byte[] input, int inOff, int inLen)
- throws javax.crypto.IllegalBlockSizeException,
- javax.crypto.BadPaddingException
- {
- return doFinal(input, inOff, inLen);
- }
-
- /**
- * Perform the last step of a multi-step en-/decryption operation or a
- * single-step en-/decryption operation by processing the given input data
- * and any remaining buffered data. The data to be processed is given in an
- * input byte array. Beginning at inputOffset, only the first inputLen bytes
- * are en-/decrypted, including any buffered bytes of a previous update
- * operation. If necessary, padding is performed. The result is stored in
- * the given output byte array, beginning at outputOffset. The number of
- * bytes stored in this byte array are returned.
- *
- * @param input the byte array holding the data to be processed
- * @param inOff the offset indicating the start position within the input
- * byte array
- * @param inLen the number of bytes to be processed
- * @param output the byte array for holding the result
- * @param outOff the offset indicating the start position within the output
- * byte array to which the en/decrypted data is written
- * @return the number of bytes stored in the output byte array
- * @throws javax.crypto.ShortBufferException if the output buffer is too short to hold the output.
- * @throws javax.crypto.IllegalBlockSizeException if the ciphertext length is not a multiple of the
- * blocklength.
- * @throws javax.crypto.BadPaddingException if unpadding is not possible.
- */
- protected final int engineDoFinal(byte[] input, int inOff, int inLen,
- byte[] output, int outOff)
- throws javax.crypto.ShortBufferException,
- javax.crypto.IllegalBlockSizeException,
- javax.crypto.BadPaddingException
- {
- return doFinal(input, inOff, inLen, output, outOff);
- }
-
- /**
- * @return the block size (in bytes), or 0 if the underlying algorithm is
- * not a block cipher
- */
- protected final int engineGetBlockSize()
- {
- return getBlockSize();
- }
-
- /**
- * Return the key size of the given key object in bits.
- *
- * @param key the key object
- * @return the key size in bits of the given key object
- * @throws java.security.InvalidKeyException if key is invalid.
- */
- protected final int engineGetKeySize(java.security.Key key)
- throws java.security.InvalidKeyException
- {
- if (!(key instanceof Key))
- {
- throw new java.security.InvalidKeyException("Unsupported key.");
- }
- return getKeySize((Key)key);
- }
-
- /**
- * Return the initialization vector. 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 <tt>null</tt> if
- * the underlying algorithm does not use an IV, or if the IV has not
- * yet been set.
- */
- protected final byte[] engineGetIV()
- {
- return getIV();
- }
-
- /**
- * Return the length in bytes that an output buffer would need to be in
- * order to hold the result of the next update or doFinal operation, given
- * the input length inputLen (in bytes).
- * <p/>
- * This call takes into account any unprocessed (buffered) data from a
- * previous update call, and padding.
- * <p/>
- * The actual output length of the next update or doFinal call may be
- * smaller than the length returned by this method.
- *
- * @param inLen the input length (in bytes)
- * @return the required output buffer size (in bytes)
- */
- protected final int engineGetOutputSize(int inLen)
- {
- return getOutputSize(inLen);
- }
-
- /**
- * 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 the default set of parameters or a set of randomly
- * generated parameters used by the underlying cipher implementation
- * (provided that the underlying cipher implementation uses a default set of
- * parameters or creates new parameters if it needs 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 final java.security.AlgorithmParameters engineGetParameters()
- {
- // TODO
- return null;
- }
-
- /**
- * Set the mode of this cipher.
- *
- * @param modeName the cipher mode
- * @throws java.security.NoSuchAlgorithmException if neither the mode with the given name nor the default
- * mode can be found
- */
- protected final void engineSetMode(String modeName)
- throws java.security.NoSuchAlgorithmException
- {
- setMode(modeName);
- }
-
- /**
- * Set the padding scheme of this cipher.
- *
- * @param paddingName the padding scheme
- * @throws javax.crypto.NoSuchPaddingException if the requested padding scheme cannot be found.
- */
- protected final void engineSetPadding(String paddingName)
- throws javax.crypto.NoSuchPaddingException
- {
- setPadding(paddingName);
- }
-
- /**
- * Return the result of the next step of a multi-step en-/decryption
- * operation. The data to be processed is given in an input byte array.
- * Beginning at inputOffset, only the first inputLen bytes are
- * en-/decrypted. The result is returned as a byte array.
- *
- * @param input the byte array holding the data to be processed
- * @param inOff the offset indicating the start position within the input
- * byte array
- * @param inLen the number of bytes to be processed
- * @return the byte array containing the en-/decrypted data
- */
- protected final byte[] engineUpdate(byte[] input, int inOff, int inLen)
- {
- return update(input, inOff, inLen);
- }
-
- /**
- * Perform the next step of a multi-step en-/decryption operation. The data
- * to be processed is given in an input byte array. Beginning at
- * inputOffset, only the first inputLen bytes are en-/decrypted. The result
- * is stored in the given output byte array, beginning at outputOffset. The
- * number of bytes stored in this output byte array are returned.
- *
- * @param input the byte array holding the data to be processed
- * @param inOff the offset indicating the start position within the input
- * byte array
- * @param inLen the number of bytes to be processed
- * @param output the byte array for holding the result
- * @param outOff the offset indicating the start position within the output
- * byte array to which the en-/decrypted data is written
- * @return the number of bytes that are stored in the output byte array
- * @throws javax.crypto.ShortBufferException if the output buffer is too short to hold the output.
- */
- protected final int engineUpdate(final byte[] input, final int inOff,
- final int inLen, byte[] output, final int outOff)
- throws javax.crypto.ShortBufferException
- {
- return update(input, inOff, inLen, output, outOff);
- }
-
- /**
- * Initialize this cipher with a key, a set of algorithm parameters, and a
- * source of randomness for encryption.
- * <p/>
- * If this cipher requires any algorithm parameters and paramSpec 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, and raise an
- * InvalidAlgorithmParameterException if it is being initialized for
- * decryption. The generated parameters can be retrieved using
- * engineGetParameters or engineGetIV (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 random.
- * <p/>
- * Note that when a {@link BlockCipher} 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 key the encryption key
- * @param cipherParams the cipher parameters
- * @param random the source of randomness
- * @throws InvalidKeyException if the given key is inappropriate for initializing this
- * block cipher.
- * @throws InvalidAlgorithmParameterException if the parameters are inappropriate for initializing this
- * block cipher.
- */
- public abstract void initEncrypt(Key key,
- AlgorithmParameterSpec cipherParams, SecureRandom random)
- throws InvalidKeyException, InvalidAlgorithmParameterException;
-
- /**
- * Initialize this cipher with a key, a set of algorithm parameters, and a
- * source of randomness for decryption.
- * <p/>
- * If this cipher requires any algorithm parameters and paramSpec 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, and throw an
- * {@link InvalidAlgorithmParameterException} if it is being initialized for
- * decryption. The generated parameters can be retrieved using
- * engineGetParameters or engineGetIV (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 random.
- * <p/>
- * Note that when a {@link BlockCipher} 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 key the encryption key
- * @param cipherParams the cipher parameters
- * @throws InvalidKeyException if the given key is inappropriate for initializing this
- * block cipher.
- * @throws InvalidAlgorithmParameterException if the parameters are inappropriate for initializing this
- * block cipher.
- */
- public abstract void initDecrypt(Key key,
- AlgorithmParameterSpec cipherParams)
- throws InvalidKeyException,
- InvalidAlgorithmParameterException;
-
- /**
- * @return the name of this cipher
- */
- public abstract String getName();
-
- /**
- * @return the block size (in bytes), or 0 if the underlying algorithm is
- * not a block cipher
- */
- public abstract int getBlockSize();
-
- /**
- * Returns the length in bytes that an output buffer would need to be in
- * order to hold the result of the next update or doFinal operation, given
- * the input length inputLen (in bytes).
- * <p/>
- * This call takes into account any unprocessed (buffered) data from a
- * previous update call, and padding.
- * <p/>
- * The actual output length of the next update or doFinal 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)
- */
- public abstract int getOutputSize(int inputLen);
-
- /**
- * Return the key size of the given key object in bits.
- *
- * @param key the key object
- * @return the key size in bits of the given key object
- * @throws InvalidKeyException if key is invalid.
- */
- public abstract int getKeySize(Key key)
- throws InvalidKeyException;
-
- /**
- * 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 the default set of parameters or a set of randomly
- * generated parameters used by the underlying cipher implementation
- * (provided that the underlying cipher implementation uses a default set of
- * parameters or creates new parameters if it needs parameters but was not
- * initialized with any).
- *
- * @return the parameters used with this cipher, or null if this cipher does
- * not use any parameters.
- */
- public abstract AlgorithmParameterSpec getParameters();
-
- /**
- * Return the initialization vector. 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 <tt>null</tt> if
- * the underlying algorithm does not use an IV, or if the IV has not
- * yet been set.
- */
- public abstract byte[] getIV();
-
- /**
- * Set the mode of this cipher.
- *
- * @param mode the cipher mode
- * @throws NoSuchModeException if the requested mode cannot be found.
- */
- protected abstract void setMode(String mode)
- throws NoSuchAlgorithmException;
-
- /**
- * Set the padding mechanism of this cipher.
- *
- * @param padding the padding mechanism
- * @throws NoSuchPaddingException if the requested padding scheme cannot be found.
- */
- protected abstract void setPadding(String padding)
- throws NoSuchPaddingException;
-
- /**
- * Continue a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized), processing another data part.
- *
- * @param input the input buffer
- * @return a new buffer with the result (maybe an empty byte array)
- */
- public final byte[] update(byte[] input)
- {
- return update(input, 0, input.length);
- }
-
- /**
- * Continue a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized), processing another data part.
- *
- * @param input the input buffer
- * @param inOff the offset where the input starts
- * @param inLen the input length
- * @return a new buffer with the result (maybe an empty byte array)
- */
- public abstract byte[] update(byte[] input, int inOff, int inLen);
-
- /**
- * Continue a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized), processing another data part.
- *
- * @param input the input buffer
- * @param inOff the offset where the input starts
- * @param inLen the input length
- * @param output the output buffer
- * @param outOff the offset where the result is stored
- * @return the length of the output
- * @throws ShortBufferException if the output buffer is too small to hold the result.
- */
- public abstract int update(byte[] input, int inOff, int inLen,
- byte[] output, int outOff)
- throws ShortBufferException;
-
- /**
- * Finish a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized).
- *
- * @return a new buffer with the result
- * @throws IllegalBlockSizeException if this cipher is a block cipher and the total input
- * length is not a multiple of the block size (for
- * encryption when no padding is used or for decryption).
- * @throws BadPaddingException if this cipher is a block cipher and unpadding fails.
- */
- public final byte[] doFinal()
- throws IllegalBlockSizeException,
- BadPaddingException
- {
- return doFinal(null, 0, 0);
- }
-
- /**
- * Finish a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized).
- *
- * @param input the input buffer
- * @return a new buffer with the result
- * @throws IllegalBlockSizeException if this cipher is a block cipher and the total input
- * length is not a multiple of the block size (for
- * encryption when no padding is used or for decryption).
- * @throws BadPaddingException if this cipher is a block cipher and unpadding fails.
- */
- public final byte[] doFinal(byte[] input)
- throws IllegalBlockSizeException,
- BadPaddingException
- {
- return doFinal(input, 0, input.length);
- }
-
- /**
- * Finish a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized).
- *
- * @param input the input buffer
- * @param inOff the offset where the input starts
- * @param inLen the input length
- * @return a new buffer with the result
- * @throws IllegalBlockSizeException if this cipher is a block cipher and the total input
- * length is not a multiple of the block size (for
- * encryption when no padding is used or for decryption).
- * @throws BadPaddingException if this cipher is a block cipher and unpadding fails.
- */
- public abstract byte[] doFinal(byte[] input, int inOff, int inLen)
- throws IllegalBlockSizeException, BadPaddingException;
-
- /**
- * Finish a multiple-part encryption or decryption operation (depending on
- * how this cipher was initialized).
- *
- * @param input the input buffer
- * @param inOff the offset where the input starts
- * @param inLen the input length
- * @param output the buffer for the result
- * @param outOff the offset where the result is stored
- * @return the output length
- * @throws ShortBufferException if the output buffer is too small to hold the result.
- * @throws IllegalBlockSizeException if this cipher is a block cipher and the total input
- * length is not a multiple of the block size (for
- * encryption when no padding is used or for decryption).
- * @throws BadPaddingException if this cipher is a block cipher and unpadding fails.
- */
- public abstract int doFinal(byte[] input, int inOff, int inLen,
- byte[] output, int outOff)
- throws ShortBufferException,
- IllegalBlockSizeException, BadPaddingException;
-
-}