open-keychain/libraries/spongycastle/jce/src/main/java/javax/crypto/NullCipher.java
2014-01-27 14:00:22 +01:00

241 lines
6.8 KiB
Java

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;
/**
* The NullCipher class is a class that provides an
* "identity cipher" -- one that does not tranform the plaintext. As
* a consequence, the ciphertext is identical to the plaintext. All
* initialization methods do nothing, while the blocksize is set to 1
* byte.
*
* @since JCE1.2
*/
public class NullCipher
extends Cipher
{
static private class NullCipherSpi
extends CipherSpi
{
/**
* Sets the mode of this cipher - no op.
*/
protected void engineSetMode(
String mode)
throws NoSuchAlgorithmException
{
}
/**
* Sets the padding mechanism of this cipher - no op.
*/
protected void engineSetPadding(
String padding)
throws NoSuchPaddingException
{
}
/**
* Returns the block size (in bytes) - 1
*/
protected int engineGetBlockSize()
{
return 1;
}
/**
* 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).
*
* @param inputLen the input length (in bytes)
* @return the required output buffer size (in bytes)
*/
protected int engineGetOutputSize(
int inputLen)
{
return inputLen;
}
/**
* Returns the initialization vector (IV) in a new buffer.
*
* @return null
*/
protected byte[] engineGetIV()
{
return null;
}
/**
* Returns the parameters used with this cipher - null
*/
protected AlgorithmParameters engineGetParameters()
{
return null;
}
/**
* Initializes this cipher with a key and a source
* of randomness - no op.
*/
protected 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 - no op.
*/
protected 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 - no op.
*/
protected 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 - in this case just return a copy of the input.
*/
protected byte[] engineUpdate(
byte[] input,
int inputOffset,
int inputLen)
{
if (input == null)
{
return null;
}
byte[] tmp = new byte[inputLen];
System.arraycopy(input, inputOffset, tmp, 0, inputLen);
return tmp;
}
/**
* Continues a multiple-part encryption or decryption operation
* (depending on how this cipher was initialized), processing another data
* part - in this case just copy the input to the output.
*/
protected int engineUpdate(
byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException
{
if (input == null)
{
return 0;
}
if ((output.length - outputOffset) < inputLen)
{
throw new ShortBufferException("output buffer to short for NullCipher");
}
System.arraycopy(input, inputOffset, output, outputOffset, inputLen);
return inputLen;
}
/**
* 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
* - in this case just return a copy of the input.
*/
protected byte[] engineDoFinal(
byte[] input,
int inputOffset,
int inputLen)
throws IllegalBlockSizeException, BadPaddingException
{
if (input == null)
{
return new byte[0];
}
byte[] tmp = new byte[inputLen];
System.arraycopy(input, inputOffset, tmp, 0, inputLen);
return tmp;
}
/**
* 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.
*/
protected int engineDoFinal(
byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
{
if (input == null)
{
return 0;
}
if ((output.length - outputOffset) < inputLen)
{
throw new ShortBufferException("output buffer too short for NullCipher");
}
System.arraycopy(input, inputOffset, output, outputOffset, inputLen);
return inputLen;
}
/**
* Returns the key size of the given key object - 0
*/
protected int engineGetKeySize(
Key key)
throws InvalidKeyException
{
return 0;
}
}
public NullCipher()
{
super(new NullCipherSpi(), null, "NULL");
}
}