public abstract class AbstractRSACipherSpi extends CipherSpi
hashandMGF1Padding" (or
"RSA/ECB/OAEPPadding") for PKCS#1 v2.2 padding. . "RSA/ECB/NoPadding" for rsa RSA.
We only do one RSA operation per doFinal() call. If the application passes more data via calls to update() or
doFinal(), we throw an IllegalBlockSizeException when doFinal() is called (see JCE API spec). Bulk encryption using
RSA does not make sense and is not standardized.
Note: RSA keys should be at least 512 bits long| Constructor and Description |
|---|
AbstractRSACipherSpi()
Default constructor.
|
AbstractRSACipherSpi(int paddingType,
int oaepHashAlgorithm)
Custom constructor.
|
| Modifier and Type | Method and Description |
|---|---|
protected abstract int |
decrypt(byte[] in,
int inOffset,
int inLength,
byte[] output,
int outputOffset)
Decrypt a buffer with the RSA cipher.
|
protected abstract int |
encrypt(byte[] in,
int inOffset,
int inLength,
byte[] output,
int outputOffset)
Encrypt a buffer with the RSA cipher.
|
protected byte[] |
engineDoFinal(byte[] in,
int inOfs,
int inLen)
Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation.
|
protected int |
engineDoFinal(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs)
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[] in,
int inOfs,
int inLen)
Continues a multiple-part encryption or decryption operation (depending on how this cipher was initialized),
processing another data part.
|
protected int |
engineUpdate(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs)
Continues a multiple-part encryption or decryption operation (depending on how this cipher was initialized),
processing another data part.
|
protected abstract void |
init(NativePublicKey publicKey,
NativePrivateKey privateKey,
int padding,
int hash)
Initialize the native part of the RSA cipher.
|
engineUnwrap, engineUpdateAAD, engineWrappublic AbstractRSACipherSpi()
public AbstractRSACipherSpi(int paddingType,
int oaepHashAlgorithm)
paddingType - one of PAD_* above.oaepHashAlgorithm - one of OAEP_HASH_* above.protected abstract int decrypt(byte[] in,
int inOffset,
int inLength,
byte[] output,
int outputOffset)
in - input bufferinOffset - offset in the input bufferinLength - input buffer lengthoutput - output bufferoutputOffset - offset in the output buffer lengthprotected abstract int encrypt(byte[] in,
int inOffset,
int inLength,
byte[] output,
int outputOffset)
in - input bufferinOffset - offset in the input bufferinLength - input buffer lengthoutput - output bufferoutputOffset - offset in the output buffer lengthprotected byte[] engineDoFinal(byte[] in,
int inOfs,
int inLen)
throws BadPaddingException,
IllegalBlockSizeException
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 CipherSpiin - the input bufferinOfs - the offset in input where the input startsinLen - the input lengthBadPaddingException - 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 valueIllegalBlockSizeException - 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.protected int engineDoFinal(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs)
throws ShortBufferException,
BadPaddingException,
IllegalBlockSizeException
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 CipherSpiin - the input bufferinOfs - the offset in input where the input startsinLen - the input lengthout - the buffer for the resultoutOfs - the offset in output where the result is storedoutputShortBufferException - if the given output buffer is too small to hold the resultBadPaddingException - 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 valueIllegalBlockSizeException - 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.protected 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[] in,
int inOfs,
int inLen)
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 CipherSpiin - the input bufferinOfs - the offset in input where the input startsinLen - the input lengthprotected int engineUpdate(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs)
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 CipherSpiin - the input bufferinOfs - the offset in input where the input startsinLen - the input lengthout - the buffer for the resultoutOfs - the offset in output where the result is storedoutputprotected abstract void init(NativePublicKey publicKey, NativePrivateKey privateKey, int padding, int hash)
publicKey - Public key of the RSA cipher (null for decryption).privateKey - Private key of the RSA cipher (null for encryption).padding - Padding scheme of the RSA cipher.hash - Hash algorithm of the RSA cipher (valid only for OAEP with MGF1 padding scheme).