public abstract class CipherSpi extends Object
Implementers of cryptographic ciphers must implement all the abstract methods
for every cipher they implement. CipherSpi instances are created
along with ciphers when the Cipher.getInstance(java.lang.String) method is called. A
Cipher is referenced by a transformation, which is a string
that describes the operation (or set of operations), always consisting of the
cipher's name and optionally followed by a mode and a padding, in the form:
Cipher
instances.
When one of the Cipher.getInstance(java.lang.String) factory methods is called with a
transformation that is only an algorithm, check if the provider
defines a CipherSpi for "algorithm", if so: return it, otherwise
throw a NoSuchAlgorithmException.
The following rules apply when a transformation is of the form "algorithm/mode/padding":
CipherSpi subclass registered for
"algorithm/mode/padding": return it, otherwise go to step 2.
CipherSpi subclass registered for
"algorithm/mode": instantiate it, call
engineSetPadding(String) for the
padding name and return it, otherwise go to step 3.
CipherSpi subclass registered for
"algorithm//padding": instantiate it, call
engineSetMode(String) for the mode
name and return it, otherwise go to step 4.
CipherSpi subclass registered for "algorithm":
instantiate it, call engineSetMode(String) for the mode name , call
engineSetPadding(String) for the
padding name and return it, otherwise throw a
NoSuchAlgorithmException.
Cipher| Constructor and Description |
|---|
CipherSpi()
Creates a new
CipherSpi instance. |
| Modifier and Type | Method and Description |
|---|---|
protected abstract byte[] |
engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
Finishes a multi-part transformation (encryption or decryption).
|
protected abstract int |
engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
Finishes a multi-part transformation (encryption or decryption).
|
protected int |
engineDoFinal(ByteBuffer input,
ByteBuffer output)
Finishes a multi-part transformation (encryption or decryption).
|
protected abstract int |
engineGetBlockSize()
Returns the block size of this cipher (in bytes)
|
protected abstract byte[] |
engineGetIV()
Returns the Initialization Vector (IV) that was used to initialize this
cipher or
null if none was used. |
protected int |
engineGetKeySize(Key key)
Returns the size of a specified key object in bits.
|
protected abstract int |
engineGetOutputSize(int inputLen)
Returns the size for a buffer (in bytes), that the next call to
update of doFinal would return, taking into account any buffered
data from previous update calls and padding. |
protected abstract AlgorithmParameters |
engineGetParameters()
Returns the parameters that where used to create this cipher instance.
|
protected abstract void |
engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
Initializes this cipher instance with the specified key, algorithm
parameters and a source of randomness.
|
protected abstract void |
engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random)
Initializes this cipher instance with the specified key, algorithm
parameters and a source of randomness.
|
protected abstract void |
engineInit(int opmode,
Key key,
SecureRandom random)
Initializes this cipher instance with the specified key and a source of
randomness.
|
protected abstract void |
engineSetMode(String mode)
Sets the mode for this cipher.
|
protected abstract void |
engineSetPadding(String padding)
Sets the padding method for this cipher.
|
protected Key |
engineUnwrap(byte[] wrappedKey,
String wrappedKeyAlgorithm,
int wrappedKeyType)
Unwraps a key using this cipher instance.
|
protected abstract byte[] |
engineUpdate(byte[] input,
int inputOffset,
int inputLen)
Continues a multi-part transformation (encryption or decryption).
|
protected abstract int |
engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
Continues a multi-part transformation (encryption or decryption).
|
protected int |
engineUpdate(ByteBuffer input,
ByteBuffer output)
Continues a multi-part transformation (encryption or decryption).
|
protected void |
engineUpdateAAD(byte[] input,
int inputOffset,
int inputLen)
Continues a multi-part transformation (encryption or decryption) with
Authenticated Additional Data (AAD).
|
protected void |
engineUpdateAAD(ByteBuffer input)
Continues a multi-part transformation (encryption or decryption).
|
protected byte[] |
engineWrap(Key key)
Wraps a key using this cipher instance.
|
protected abstract void engineSetMode(String mode) throws NoSuchAlgorithmException
mode - the name of the cipher mode.NoSuchAlgorithmException - if the specified cipher mode is not supported by this
provider.protected abstract void engineSetPadding(String padding) throws NoSuchPaddingException
padding - the name of the padding method.NoSuchPaddingException - if the specified padding method is not supported by this
cipher.protected abstract int engineGetBlockSize()
protected abstract int engineGetOutputSize(int inputLen)
update of doFinal would return, taking into account any buffered
data from previous update calls and padding.
The actual output length of the next call to update or doFinal may be smaller than the length returned by this method.
inputLen - the length of the input (in bytes).protected abstract byte[] engineGetIV()
null if none was used.null if none was used.protected abstract AlgorithmParameters engineGetParameters()
These may be a the same parameters that were used to create this cipher instance, or may be a combination of default and random parameters, depending on the underlying cipher implementation.
null if this cipher instance does not have any parameters
at all.protected abstract void engineInit(int opmode,
Key key,
SecureRandom random)
throws InvalidKeyException
The cipher will be initialized for the specified operation (one of:
encryption, decryption, key wrapping or key unwrapping) depending on
opmode.
If this cipher instance needs any algorithm parameters or random values
that the specified key cannot provide, the underlying implementation of
this cipher is supposed to generate the required parameters (using its
provider or random values). Random values will be generated using random;
When a cipher instance is initialized by a call to any of the init methods, the state of the instance is overridden, means it is
equivalent to creating a new instance and calling it init method.
opmode - the operation this cipher instance should be initialized for
(one of: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE or UNWRAP_MODE).key - the input key for the operation.random - the source of randomness to use.InvalidKeyException - if the specified key cannot be used to initialize this cipher
instance.protected abstract void engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
The cipher will be initialized for the specified operation (one of:
encryption, decryption, key wrapping or key unwrapping) depending on
opmode.
If this cipher instance needs any algorithm parameters and params
is null, the underlying implementation of this cipher is supposed
to generate the required parameters (using its provider or random
values). Random values are generated using random.
When a cipher instance is initialized by a call to any of the init methods, the state of the instance is overridden, means it is
equivalent to creating a new instance and calling it init method.
opmode - the operation this cipher instance should be initialized for
(one of: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE or UNWRAP_MODE).key - the input key for the operation.params - the algorithm parameters.random - the source of randomness to use.InvalidKeyException - if the specified key cannot be used to initialize this cipher
instance.InvalidAlgorithmParameterException - it the specified parameters are inappropriate for this
cipher.protected abstract void engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
The cipher will be initialized for the specified operation (one of:
encryption, decryption, key wrapping or key unwrapping) depending on
opmode.
If this cipher instance needs any algorithm parameters and params
is null, the underlying implementation of this cipher is supposed
to generate the required parameters (using its provider or random
values). Random values are generated using random.
When a cipher instance is initialized by a call to any of the init methods, the state of the instance is overridden, means it is
equivalent to creating a new instance and calling it init method.
opmode - the operation this cipher instance should be initialized for
(one of: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE or UNWRAP_MODE).key - the input key for the operation.params - the algorithm parameters.random - the source of randomness to use.InvalidKeyException - if the specified key cannot be used to initialize this cipher
instance.InvalidAlgorithmParameterException - if the specified parameters are inappropriate for this
cipher.protected abstract byte[] engineUpdate(byte[] input,
int inputOffset,
int inputLen)
input - the input bytes to transform.inputOffset - the offset in the input to start.inputLen - the length of the input to transform.null if the
input has zero length.IllegalStateException - if this cipher instance is not initialized for encryption or
decryption.IllegalArgumentException - if the input is null, or if inputOffset and inputLen do not specify a valid chunk in the input buffer.protected abstract int engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException
output buffer.
If the size of the output buffer is too small to hold the result,
a ShortBufferException is thrown. Use
getOutputSize to check for the size of the
output buffer.
input - the input bytes to transform.inputOffset - the offset in the input to start.inputLen - the length of the input to transform.output - the output buffer.outputOffset - the offset in the output buffer.ShortBufferException - if the size of the output buffer is too small.protected int engineUpdate(ByteBuffer input, ByteBuffer output) throws ShortBufferException
input.remaining() bytes starting at input.position() are
transformed and stored in the output buffer.
If the output.remaining() is too small to hold the transformed
bytes a ShortBufferException is thrown. Use
getOutputSize to check for the size of the
output buffer.
input - the input buffer to transform.output - the output buffer to store the result within.ShortBufferException - if the size of the output buffer is too small.protected void engineUpdateAAD(byte[] input,
int inputOffset,
int inputLen)
Cipher is initialized and before any data is passed to the
instance.
This is only usable with cipher modes that support Authenticated Encryption with Additional Data (AEAD) such as Galois/Counter Mode (GCM).
input - bytes of AAD to use with the cipherinputOffset - offset within bytes of additional data to add to cipherinputLen - length of bytes of additional data to add to cipherIllegalStateException - if this cipher instance is not initialized for encryption or
decryption.IllegalArgumentException - if input is null, or if inputOffset and
inputLen do not specify a valid chunk in the input
buffer.UnsupportedOperationException - if the cipher does not support AEADprotected void engineUpdateAAD(ByteBuffer input)
input.remaining() bytes starting at input.position() are
used for the Additional Authenticated Data (AAD). AAD may only be added
after the Cipher is initialized and before any data is passed to
the instance.
This is only usable with cipher modes that support Authenticated Encryption with Additional Data (AEAD) such as Galois/Counter Mode (GCM).
input - the input buffer to transform.protected abstract byte[] engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
throws IllegalBlockSizeException,
BadPaddingException
Processes the inputLen bytes in input buffer at inputOffset, and any bytes that have been buffered in previous update calls.
input - the input buffer.inputOffset - the offset in the input buffer.inputLen - the length of the input.IllegalBlockSizeException - if the size of the resulting bytes is not a multiple of the
cipher block size.BadPaddingException - if the padding of the data does not match the padding scheme.protected abstract int engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException,
IllegalBlockSizeException,
BadPaddingException
Processes the inputLen bytes in input buffer at
inputOffset, and any bytes that have been buffered in previous
update calls.
input - the input buffer.inputOffset - the offset in the input buffer.inputLen - the length of the input.output - the output buffer for the transformed bytes.outputOffset - the offset in the output buffer.ShortBufferException - if the size of the output buffer is too small.IllegalBlockSizeException - if the size of the resulting bytes is not a multiple of the
cipher block size.BadPaddingException - if the padding of the data does not match the padding scheme.protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
Processes the input.remaining() bytes in input buffer at
input.position(), and any bytes that have been buffered in
previous update calls. The transformed bytes are placed into
output buffer.
input - the input buffer.output - the output buffer.ShortBufferException - if the size of the output buffer is too small.IllegalBlockSizeException - if the size of the resulting bytes is not a multiple of the
cipher block size.BadPaddingException - if the padding of the data does not match the padding scheme.IllegalArgumentException - if the input buffer and the output buffer are the same
object.IllegalStateException - if this cipher instance is not initialized for encryption or
decryption.protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
UnsupportedOperationException.key - the key to wrap.IllegalBlockSizeException - if the size of the resulting bytes is not a multiple of the
cipher block size.InvalidKeyException - if this cipher instance cannot wrap this key.protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
This method has been added to this class (for backwards compatibility, it
cannot be abstract). If this method is not overridden, it throws an
UnsupportedOperationException.
wrappedKey - the wrapped key to unwrap.wrappedKeyAlgorithm - the algorithm for the wrapped key.wrappedKeyType - the type of the wrapped key (one of: SECRET_KEY,
PRIVATE_KEY or PUBLIC_KEY)InvalidKeyException - if the wrappedKey cannot be unwrapped to a key of
type wrappedKeyType for the wrappedKeyAlgorithm.NoSuchAlgorithmException - if no provider can be found that can create a key of type
wrappedKeyType for the wrappedKeyAlgorithm.protected int engineGetKeySize(Key key) throws InvalidKeyException
UnsupportedOperationException.key - the key to get the size for.InvalidKeyException - if the size of the key cannot be determined by this
implementation.