mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-06 17:25:05 -05:00
241 lines
6.8 KiB
Java
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");
|
|
}
|
|
}
|