Cipher 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.
In order to create an instance of Cipher, which
encapsulates an instance of this CipherSpi class, an
application calls one of the
getInstance
factory methods of the
Cipher engine class and specifies the requested
transformation.
Optionally, the application may also specify the name of a provider.
A transformation 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., AES), and may be followed by a feedback mode and padding scheme.
A transformation is of the form:
(in the latter case, provider-specific default values for the mode and padding scheme are used). For example, the following is a valid transformation:
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
A provider may supply a separate class for each combination
of algorithm/mode/padding, or may decide to provide more generic
classes representing sub-transformations corresponding to
algorithm or algorithm/mode or algorithm//padding
(note the double slashes),
in which case the requested mode and/or padding are set automatically by
the getInstance methods of Cipher, which invoke
the engineSetMode and
engineSetPadding
methods of the provider's subclass of CipherSpi.
A Cipher property in a provider master class may have one of
the following formats:
// provider's subclass of "CipherSpi" implements "algName" with
// pluggable mode and padding
Cipher.algName
// provider's subclass of "CipherSpi" implements "algName" in the
// specified "mode", with pluggable padding
Cipher.algName/mode
// provider's subclass of "CipherSpi" implements "algName" with the
// specified "padding", with pluggable mode
Cipher.algName//padding
// provider's subclass of "CipherSpi" implements "algName" with the
// specified "mode" and "padding"
Cipher.algName/mode/padding
For example, a provider may supply a subclass of CipherSpi
that implements AES/ECB/PKCS5Padding, one that implements
AES/CBC/PKCS5Padding, one that implements
AES/CFB/PKCS5Padding, and yet another one that implements
AES/OFB/PKCS5Padding. That provider would have the following
Cipher properties in its master class:
Cipher.AES/ECB/PKCS5Padding
Cipher.AES/CBC/PKCS5Padding
Cipher.AES/CFB/PKCS5Padding
Cipher.AES/OFB/PKCS5Padding
Another provider may implement a class for each of the above modes
(i.e., one class for ECB, one for CBC, one for CFB,
and one for OFB), one class for PKCS5Padding,
and a generic AES class that subclasses from CipherSpi.
That provider would have the following
Cipher properties in its master class:
Cipher.AES
The getInstance factory method of the Cipher
engine class follows these rules in order to instantiate a provider's
implementation of CipherSpi for a
transformation of the form "algorithm":
CipherSpi
for the specified "algorithm".
If the answer is YES, instantiate this class, for whose mode and padding scheme default values (as supplied by the provider) are used.
If the answer is NO, throw a NoSuchAlgorithmException
exception.
The getInstance factory method of the Cipher
engine class follows these rules in order to instantiate a provider's
implementation of CipherSpi for a
transformation of the form "algorithm/mode/padding":
CipherSpi
for the specified "algorithm/mode/padding" transformation.
If the answer is YES, instantiate it.
If the answer is NO, go to the next step.
CipherSpi
for the sub-transformation "algorithm/mode".
If the answer is YES, instantiate it, and call
engineSetPadding(<i>padding</i>) on the new instance.
If the answer is NO, go to the next step.
CipherSpi
for the sub-transformation "algorithm//padding" (note the double
slashes).
If the answer is YES, instantiate it, and call
engineSetMode(<i>mode</i>) on the new instance.
If the answer is NO, go to the next step.
CipherSpi
for the sub-transformation "algorithm".
If the answer is YES, instantiate it, and call
engineSetMode(<i>mode</i>) and
engineSetPadding(<i>padding</i>) on the new instance.
If the answer is NO, throw a NoSuchAlgorithmException
exception.
KeyGenerator, SecretKey
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| private int | bufferCrypt(ByteBuffer input, ByteBuffer output, boolean isUpdate)
Implementation for encryption using ByteBuffers. |
| protected abstract byte[] | Returns: the new buffer with the resultthe input buffer input, int the offset in inputOffset, int input where the input startsthe input length inputLen)Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation. |
| protected abstract int | Returns: the number of bytes stored inoutputthe input buffer input, int the offset in inputOffset, int input where the input
startsthe input length inputLen, byte[] the buffer for the result output, int the offset in outputOffset)output where the result
is storedEncrypts or decrypts data in a single-part operation, or finishes a multiple-part operation. |
| protected int | Returns: the number of bytes stored inoutputthe input ByteBuffer input, ByteBuffer the output ByteBuffer output)Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation. |
| protected abstract int | Returns: the block size (in bytes), or 0 if the algorithm is not a block cipherReturns the block size (in bytes). |
| protected abstract byte[] | Returns: the initialization vector in a new buffer, ornull if the
algorithm does not use an IV, or if the IV has not yet
been setReturns the initialization vector (IV) in a new buffer. |
| protected int | Returns: the key size of the given key objectthe key object key)Returns the key size of the given key object in bits. |
| protected abstract int | Returns: the required output buffer size (in bytes)the input length (in bytes) inputLen)Returns the length in bytes that an output buffer would
need to be in order to hold the result of the next |
| protected abstract AlgorithmParameters | Returns: the parameters used with this cipher, ornullReturns the parameters used with this cipher. |
| protected abstract void | engineInit(int
the operation mode of this opmode, Key CipherSpi object
(this is one of the following:
ENCRYPT_MODE, DECRYPT_MODE,
WRAP_MODE or UNWRAP_MODE)the encryption key key, SecureRandom the source of randomness random)Initializes this |
| protected abstract void | engineInit(int
the operation mode of this opmode, Key CipherSpi object
(this is one of the following:
ENCRYPT_MODE, DECRYPT_MODE,
WRAP_MODE, or UNWRAP_MODE)the encryption key key, AlgorithmParameterSpec the algorithm parameters params, SecureRandom the source of randomness random)Initializes this |
| protected abstract void | engineInit(int
the operation mode of this opmode, Key CipherSpi object
(this is one of the following:
ENCRYPT_MODE, DECRYPT_MODE,
WRAP_MODE, or UNWRAP_MODE)the encryption key key, AlgorithmParameters the algorithm parameters params, SecureRandom the source of randomness random)Initializes this |
| protected abstract void | |
| protected abstract void | |
| protected Key | Returns: the unwrapped keythe key to be unwrapped wrappedKey, String the algorithm associated with the wrapped
key wrappedKeyAlgorithm, int the type of the wrapped key. This is one of
wrappedKeyType)SECRET_KEY, PRIVATE_KEY, or PUBLIC_KEY.Unwrap a previously wrapped key. |
| protected abstract byte[] | Returns: the new buffer with the result, ornull if the
cipher is a block cipher and the input data is too short to result in a
new blockthe input buffer input, int the offset in inputOffset, int input where the input startsthe input length inputLen)Continues a multiple-part encryption or decryption operation
(depending on how this |
| protected abstract int | Returns: the number of bytes stored inoutputthe input buffer input, int the offset in inputOffset, int input where the input
startsthe input length inputLen, byte[] the buffer for the result output, int the offset in outputOffset)output where the result
is storedContinues a multiple-part encryption or decryption operation
(depending on how this |
| protected int | Returns: the number of bytes stored inoutputthe input ByteBuffer input, ByteBuffer the output ByteBuffer output)Continues a multiple-part encryption or decryption operation
(depending on how this |
| protected void | engineUpdateAAD(byte[]
the buffer containing the AAD src, int the offset in offset, int src where the AAD input startsthe number of AAD bytes len)Continues a multipart update of the Additional Authentication Data (AAD), using a subset of the provided buffer. |
| protected void | engineUpdateAAD(ByteBuffer
the buffer containing the AAD src)Continues a multipart update of the Additional Authentication Data (AAD). |
| protected byte[] | |
| pack-priv static int |
| CipherSpi | back to summary |
|---|---|
| public CipherSpi() Constructor for subclasses to call. | |
| bufferCrypt | back to summary |
|---|---|
| private int bufferCrypt(ByteBuffer input, ByteBuffer output, boolean isUpdate) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException Implementation for encryption using ByteBuffers. Used for both engineUpdate() and engineDoFinal(). | |
| engineDoFinal | back to summary |
|---|---|
| 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
The first Upon finishing, this method resets this Note if any exception is thrown, this
| |
| engineDoFinal | back to summary |
|---|---|
| protected abstract int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, 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
The first If the Upon finishing, this method resets this Note if any exception is thrown, this
| |
| engineDoFinal | back to summary |
|---|---|
| protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, 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
All If Upon finishing, this method resets this Note if any exception is thrown, this Subclasses should consider overriding this method if they can process ByteBuffers more efficiently than byte arrays.
| |
| engineGetBlockSize | back to summary |
|---|---|
| protected abstract int engineGetBlockSize() Returns the block size (in bytes).
| |
| engineGetIV | back to summary |
|---|---|
| protected abstract byte[] engineGetIV() Returns the initialization vector (IV) in a new buffer. This is useful in the context of password-based encryption or decryption, where the IV is derived from a user-provided passphrase.
| |
| engineGetKeySize | back to summary |
|---|---|
| protected int engineGetKeySize(Key key) throws InvalidKeyException Returns the key size of the given key object in bits. This concrete method has been added to this previously-defined
abstract class. It throws an
| |
| engineGetOutputSize | back to summary |
|---|---|
| protected abstract int engineGetOutputSize(int inputLen) Returns the length in bytes that an output buffer would
need to be in order to hold the result of the next This call takes into account any unprocessed (buffered) data from a
previous The actual output length of the next
| |
| engineGetParameters | back to summary |
|---|---|
| protected abstract AlgorithmParameters engineGetParameters() Returns the parameters used with this cipher. The returned parameters may be the same that were used to initialize
this cipher, or may contain additional default or random parameter
values used by the underlying cipher implementation. If the required
parameters were not supplied and can be generated by the cipher, the
generated parameters are returned. Otherwise,
| |
| engineInit | back to summary |
|---|---|
| protected abstract void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException Initializes this The If this cipher requires any algorithm parameters that cannot be
derived from the given If this cipher requires algorithm parameters that cannot be derived from the input parameters, and there are no reasonable provider-specific default values, initialization will necessarily fail. If this cipher (including its feedback or padding scheme)
requires any random bytes (e.g., for parameter generation), it will get
them from Note that when a
| |
| engineInit | back to summary |
|---|---|
| protected abstract void engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException Initializes this The If this cipher requires any algorithm parameters and
If this cipher requires algorithm parameters that cannot be derived from the input parameters, and there are no reasonable provider-specific default values, initialization will necessarily fail. If this cipher (including its feedback or padding scheme)
requires any random bytes (e.g., for parameter generation), it will get
them from Note that when a
| |
| engineInit | back to summary |
|---|---|
| protected abstract void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException Initializes this The If this cipher requires any algorithm parameters and
If this cipher requires algorithm parameters that cannot be derived from the input parameters, and there are no reasonable provider-specific default values, initialization will necessarily fail. If this cipher (including its feedback or padding scheme)
requires any random bytes (e.g., for parameter generation), it will get
them from Note that when a
| |
| engineSetMode | back to summary |
|---|---|
| protected abstract void engineSetMode(String mode) throws NoSuchAlgorithmException Sets the mode of this cipher.
| |
| engineSetPadding | back to summary |
|---|---|
| protected abstract void engineSetPadding(String padding) throws NoSuchPaddingException Sets the padding mechanism of this cipher.
| |
| engineUnwrap | back to summary |
|---|---|
| protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException Unwrap a previously wrapped key. 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
| |
| engineUpdate | back to summary |
|---|---|
| protected abstract byte[] engineUpdate(byte[] input, int inputOffset, int inputLen) Continues a multiple-part encryption or decryption operation
(depending on how this The first
| |
| engineUpdate | back to summary |
|---|---|
| protected abstract int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException Continues a multiple-part encryption or decryption operation
(depending on how this The first If the
| |
| engineUpdate | back to summary |
|---|---|
| protected int engineUpdate(ByteBuffer input, ByteBuffer output) throws ShortBufferException Continues a multiple-part encryption or decryption operation
(depending on how this All If Subclasses should consider overriding this method if they can process ByteBuffers more efficiently than byte arrays.
| |
| engineUpdateAAD | back to summary |
|---|---|
| protected void engineUpdateAAD(byte[] src, int offset, int len) Continues a multipart update of the Additional Authentication Data (AAD), using a subset of the provided buffer.
Calls to this method provide AAD to the cipher when operating in
modes such as AEAD (GCM or CCM). If this cipher is operating in
either GCM or CCM mode, all AAD must be supplied before beginning
operations on the ciphertext (via the
| |
| engineUpdateAAD | back to summary |
|---|---|
| protected void engineUpdateAAD(ByteBuffer src) Continues a multipart update of the Additional Authentication Data (AAD).
Calls to this method provide AAD to the cipher when operating in
modes such as AEAD (GCM or CCM). If this cipher is operating in
either GCM or CCM mode, all AAD must be supplied before beginning
operations on the ciphertext (via the
All
| |
| engineWrap | back to summary |
|---|---|
| protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException Wrap a key. 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
| |
| getTempArraySize | back to summary |
|---|---|
| pack-priv static int getTempArraySize(int totalSize) | |