Package org.conscrypt
Class OpenSSLCipherChaCha20
- java.lang.Object
-
- javax.crypto.CipherSpi
-
- org.conscrypt.OpenSSLCipher
-
- org.conscrypt.OpenSSLCipherChaCha20
-
@Internal public class OpenSSLCipherChaCha20 extends OpenSSLCipher
Implementation of the ChaCha20 stream cipher.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.conscrypt.OpenSSLCipher
OpenSSLCipher.Mode, OpenSSLCipher.Padding
-
-
Field Summary
Fields Modifier and Type Field Description private static int
BLOCK_SIZE_BYTES
private int
blockCounter
private int
currentBlockConsumedBytes
private static int
NONCE_SIZE_BYTES
-
Fields inherited from class org.conscrypt.OpenSSLCipher
encodedKey, iv, mode
-
-
Constructor Summary
Constructors Constructor Description OpenSSLCipherChaCha20()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
checkSupportedKeySize(int keySize)
Checks whether the cipher supports this particularkeySize
(in bytes) and throwsInvalidKeyException
if it doesn't.(package private) void
checkSupportedMode(OpenSSLCipher.Mode mode)
Checks whether the cipher supports this particular ciphermode
and throwsNoSuchAlgorithmException
if it doesn't.(package private) void
checkSupportedPadding(OpenSSLCipher.Padding padding)
Checks whether the cipher supports this particular cipherpadding
and throwsNoSuchPaddingException
if it doesn't.(package private) int
doFinalInternal(byte[] output, int outputOffset, int maximumLen)
API-specific implementation of the final block.(package private) void
engineInitInternal(byte[] encodedKey, java.security.spec.AlgorithmParameterSpec params, java.security.SecureRandom random)
API-specific implementation of initializing the cipher.(package private) java.lang.String
getBaseCipherName()
Returns the standard name for the particular algorithm.(package private) int
getCipherBlockSize()
(package private) int
getOutputSizeForFinal(int inputLen)
The size of output ifdoFinal()
is called with thisinputLen
.(package private) int
getOutputSizeForUpdate(int inputLen)
The size of output ifupdate()
is called with thisinputLen
.private void
reset()
(package private) int
updateInternal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset, int maximumLen)
API-specific implementation of updating the cipher.-
Methods inherited from class org.conscrypt.OpenSSLCipher
engineDoFinal, engineDoFinal, engineGetBlockSize, engineGetIV, engineGetKeySize, engineGetOutputSize, engineGetParameters, engineInit, engineInit, engineInit, engineSetMode, engineSetPadding, engineUnwrap, engineUpdate, engineUpdate, engineWrap, getPadding, getParameterSpec, isEncrypting, supportsVariableSizeIv, supportsVariableSizeKey
-
-
-
-
Field Detail
-
BLOCK_SIZE_BYTES
private static final int BLOCK_SIZE_BYTES
- See Also:
- Constant Field Values
-
NONCE_SIZE_BYTES
private static final int NONCE_SIZE_BYTES
- See Also:
- Constant Field Values
-
currentBlockConsumedBytes
private int currentBlockConsumedBytes
-
blockCounter
private int blockCounter
-
-
Method Detail
-
engineInitInternal
void engineInitInternal(byte[] encodedKey, java.security.spec.AlgorithmParameterSpec params, java.security.SecureRandom random) throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
Description copied from class:OpenSSLCipher
API-specific implementation of initializing the cipher. TheOpenSSLCipher.isEncrypting()
function will tell whether it should be initialized for encryption or decryption. TheencodedKey
will be the bytes of a supported key size.- Specified by:
engineInitInternal
in classOpenSSLCipher
- Throws:
java.security.InvalidKeyException
java.security.InvalidAlgorithmParameterException
-
updateInternal
int updateInternal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset, int maximumLen) throws javax.crypto.ShortBufferException
Description copied from class:OpenSSLCipher
API-specific implementation of updating the cipher. ThemaximumLen
will be the maximum length of the output as returned byOpenSSLCipher.getOutputSizeForUpdate(int)
. The return value must be the number of bytes processed and placed intooutput
. On error, an exception must be thrown.- Specified by:
updateInternal
in classOpenSSLCipher
- Throws:
javax.crypto.ShortBufferException
-
doFinalInternal
int doFinalInternal(byte[] output, int outputOffset, int maximumLen) throws javax.crypto.IllegalBlockSizeException, javax.crypto.BadPaddingException, javax.crypto.ShortBufferException
Description copied from class:OpenSSLCipher
API-specific implementation of the final block. ThemaximumLen
will be the maximum length of the possible output as returned byOpenSSLCipher.getOutputSizeForFinal(int)
. The return value must be the number of bytes processed and placed intooutput
. On error, an exception must be thrown.- Specified by:
doFinalInternal
in classOpenSSLCipher
- Throws:
javax.crypto.IllegalBlockSizeException
javax.crypto.BadPaddingException
javax.crypto.ShortBufferException
-
reset
private void reset()
-
getBaseCipherName
java.lang.String getBaseCipherName()
Description copied from class:OpenSSLCipher
Returns the standard name for the particular algorithm.- Specified by:
getBaseCipherName
in classOpenSSLCipher
-
checkSupportedKeySize
void checkSupportedKeySize(int keySize) throws java.security.InvalidKeyException
Description copied from class:OpenSSLCipher
Checks whether the cipher supports this particularkeySize
(in bytes) and throwsInvalidKeyException
if it doesn't.- Specified by:
checkSupportedKeySize
in classOpenSSLCipher
- Throws:
java.security.InvalidKeyException
-
checkSupportedMode
void checkSupportedMode(OpenSSLCipher.Mode mode) throws java.security.NoSuchAlgorithmException
Description copied from class:OpenSSLCipher
Checks whether the cipher supports this particular ciphermode
and throwsNoSuchAlgorithmException
if it doesn't.- Specified by:
checkSupportedMode
in classOpenSSLCipher
- Throws:
java.security.NoSuchAlgorithmException
-
checkSupportedPadding
void checkSupportedPadding(OpenSSLCipher.Padding padding) throws javax.crypto.NoSuchPaddingException
Description copied from class:OpenSSLCipher
Checks whether the cipher supports this particular cipherpadding
and throwsNoSuchPaddingException
if it doesn't.- Specified by:
checkSupportedPadding
in classOpenSSLCipher
- Throws:
javax.crypto.NoSuchPaddingException
-
getCipherBlockSize
int getCipherBlockSize()
- Specified by:
getCipherBlockSize
in classOpenSSLCipher
-
getOutputSizeForFinal
int getOutputSizeForFinal(int inputLen)
Description copied from class:OpenSSLCipher
The size of output ifdoFinal()
is called with thisinputLen
. If padding is enabled and the size of the input puts it right at the block size, it will add another block for the padding.- Specified by:
getOutputSizeForFinal
in classOpenSSLCipher
-
getOutputSizeForUpdate
int getOutputSizeForUpdate(int inputLen)
Description copied from class:OpenSSLCipher
The size of output ifupdate()
is called with thisinputLen
. If padding is enabled and the size of the input puts it right at the block size, it will add another block for the padding.- Specified by:
getOutputSizeForUpdate
in classOpenSSLCipher
-
-