public class PBES2CipherSpi extends CipherSpi
| Constructor and Description |
|---|
PBES2CipherSpi(NativeSecretKeyFactorySpi secretKeyFactory,
NativeCipherSpi cipher)
Custom constructor.
|
| Modifier and Type | Method and Description |
|---|---|
protected byte[] |
engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation.
|
protected int |
engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation.
|
protected int |
engineGetBlockSize()
Returns the block size (in bytes).
|
protected byte[] |
engineGetIV()
Returns the initialization vector (IV) in a new buffer.
|
protected 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
update or doFinal operation, given the input length inputLen (in bytes). |
protected void |
engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
Initializes this cipher with a key, a set of algorithm parameters, and a source of randomness.
|
protected void |
engineInit(int opmode,
Key key,
SecureRandom random)
Initializes this cipher with a key and a source of randomness.
|
protected byte[] |
engineUpdate(byte[] input,
int inputOffset,
int inputLen)
Continues a multiple-part encryption or decryption operation (depending on how this cipher was initialized),
processing another data part.
|
protected int |
engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
Continues a multiple-part encryption or decryption operation (depending on how this cipher was initialized),
processing another data part.
|
static String |
getCipherTransformation(String transformation)
Returns the corresponding symmetric cipher transformation that can be used by a PBE cipher.
|
static PBES2CipherSpi |
getInstance(String transformation) |
static String |
getKdfAlgorithm(String transformation)
Returns the corresponding key derivation algorithm that can be used by a PBE cipher.
|
engineUnwrap, engineUpdateAAD, engineWrappublic PBES2CipherSpi(NativeSecretKeyFactorySpi secretKeyFactory, NativeCipherSpi cipher) throws NoSuchAlgorithmException, NoSuchPaddingException
secretKeyFactory - the secret key factory that can be used by the PBE cipher.cipher - the symmetric cipher that can be used by the PBE cipher.NoSuchAlgorithmException - if the algorithm is not supported.NoSuchPaddingException - if the padding is not supported.public static String getCipherTransformation(String transformation)
transformation - PBE cipher transformation@Nullable public static PBES2CipherSpi getInstance(String transformation) throws NoSuchAlgorithmException, NoSuchPaddingException
public static String getKdfAlgorithm(String transformation)
transformation - PBE cipher transformationprotected byte[] engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
throws IllegalBlockSizeException,
BadPaddingException
CipherSpi
The first inputLen bytes in the input buffer, starting at inputOffset
inclusive, and any input bytes that may have been buffered during a previous update operation, are
processed, with padding (if requested) being applied. If an AEAD mode such as GCM/CCM is being used, the
authentication tag is appended in the case of encryption, or verified in the case of decryption. The result is
stored in a new buffer.
Upon finishing, this method resets this cipher object to the state it was in when previously initialized via a
call to engineInit. That is, the object is reset and available to encrypt or decrypt (depending on
the operation mode that was specified in the call to engineInit) more data.
Note: if any exception is thrown, this cipher object may need to be reset before it can be used again.
engineDoFinal in class CipherSpiinput - the input bufferinputOffset - the offset in input where the input startsinputLen - the input lengthIllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the
total input length of the data processed by this cipher is not a multiple of block size; or if
this encryption algorithm is unable to process the input data provided.BadPaddingException - if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data
is not bounded by the appropriate padding bytesAEADBadTagException - if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication
tag does not match the calculated valueprotected int engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException,
IllegalBlockSizeException,
BadPaddingException
CipherSpi
The first inputLen bytes in the input buffer, starting at inputOffset
inclusive, and any input bytes that may have been buffered during a previous update operation, are
processed, with padding (if requested) being applied. If an AEAD mode such as GCM/CCM is being used, the
authentication tag is appended in the case of encryption, or verified in the case of decryption. The result is
stored in the output buffer, starting at outputOffset inclusive.
If the output buffer is too small to hold the result, a ShortBufferException is thrown.
Upon finishing, this method resets this cipher object to the state it was in when previously initialized via a
call to engineInit. That is, the object is reset and available to encrypt or decrypt (depending on
the operation mode that was specified in the call to engineInit) more data.
Note: if any exception is thrown, this cipher object may need to be reset before it can be used again.
engineDoFinal in class CipherSpiinput - the input bufferinputOffset - the offset in input where the input startsinputLen - the input lengthoutput - the buffer for the resultoutputOffset - the offset in output where the result is storedoutputShortBufferException - if the given output buffer is too small to hold the resultIllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the
total input length of the data processed by this cipher is not a multiple of block size; or if
this encryption algorithm is unable to process the input data provided.BadPaddingException - if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data
is not bounded by the appropriate padding bytesAEADBadTagException - if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication
tag does not match the calculated valueprotected int engineGetBlockSize()
CipherSpiengineGetBlockSize in class CipherSpiprotected byte[] engineGetIV()
CipherSpiThis is useful in the context of password-based encryption or decryption, where the IV is derived from a user-provided passphrase.
engineGetIV in class CipherSpiprotected int engineGetOutputSize(int inputLen)
CipherSpiupdate or doFinal operation, given the input length inputLen (in bytes).
This call takes into account any unprocessed (buffered) data from a previous update call, padding,
and AEAD tagging.
The actual output length of the next update or doFinal call may be smaller than the
length returned by this method.
engineGetOutputSize in class CipherSpiinputLen - the input length (in bytes)protected void engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
CipherSpi
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 requires any algorithm parameters and params 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 or key wrapping, and raise an
InvalidAlgorithmParameterException if it is being initialized for decryption or key unwrapping. The
generated parameters can be retrieved using engineGetParameters or engineGetIV (if the parameter is an IV).
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 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.
engineInit in class CipherSpiopmode - the operation mode of this cipher (this is one of the following: ENCRYPT_MODE,
DECRYPT_MODE, WRAP_MODE or UNWRAP_MODE)key - the encryption keyparams - the algorithm parametersrandom - the source of randomnessInvalidKeyException - if the given key is inappropriate for initializing this cipherInvalidAlgorithmParameterException - if the given algorithm parameters are inappropriate for this cipher, or if this cipher requires
algorithm parameters and params is null.protected void engineInit(int opmode,
Key key,
SecureRandom random)
throws InvalidKeyException
CipherSpi
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 requires any algorithm parameters that cannot be derived from the given key, 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 or key wrapping, and raise an
InvalidKeyException if it is being initialized for decryption or key unwrapping. The generated
parameters can be retrieved using engineGetParameters or engineGetIV
(if the parameter is an IV).
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 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.
engineInit in class CipherSpiopmode - the operation mode of this cipher (this is one of the following: ENCRYPT_MODE,
DECRYPT_MODE, WRAP_MODE or UNWRAP_MODE)key - the encryption keyrandom - the source of randomnessInvalidKeyException - if the given key is inappropriate for initializing this cipher, or requires algorithm parameters
that cannot be determined from the given key.protected byte[] engineUpdate(byte[] input,
int inputOffset,
int inputLen)
CipherSpi
The first inputLen bytes in the input buffer, starting at inputOffset
inclusive, are processed, and the result is stored in a new buffer.
engineUpdate in class CipherSpiinput - the input bufferinputOffset - the offset in input where the input startsinputLen - the input lengthprotected int engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException
CipherSpi
The first inputLen bytes in the input buffer, starting at inputOffset
inclusive, are processed, and the result is stored in the output buffer, starting at
outputOffset inclusive.
If the output buffer is too small to hold the result, a ShortBufferException is thrown.
engineUpdate in class CipherSpiinput - the input bufferinputOffset - the offset in input where the input startsinputLen - the input lengthoutput - the buffer for the resultoutputOffset - the offset in output where the result is storedoutputShortBufferException - if the given output buffer is too small to hold the result