public class SM2Cipher extends CipherSpi
| 限定符和类型 | 类和说明 |
|---|---|
static class |
SM2Cipher.Mode |
| 限定符和类型 | 字段和说明 |
|---|---|
private ByteArrayOutputStream |
byteBuf |
private int |
cipherMode |
private int |
curveLength |
private MessageDigest |
digest |
private ECKey |
ecKey |
private SM2Cipher.Mode |
outputMode |
private SecureRandom |
random |
| 构造器和说明 |
|---|
SM2Cipher() |
| 限定符和类型 | 方法和说明 |
|---|---|
private byte[] |
decrypt(byte[] input,
int inputOffset,
int inputLen)
Decrypt message using sm2 algorithm
|
private byte[] |
encrypt(byte[] input,
int inputOffset,
int inputLen)
Encrypt message using sm2 algorithm
|
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 AlgorithmParameters |
engineGetParameters()
Returns the parameters used with this cipher.
|
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,
AlgorithmParameters 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 void |
engineSetMode(String mode)
Sets the mode of this cipher.
|
protected void |
engineSetPadding(String padding)
Sets the padding mechanism of this cipher.
|
protected Key |
engineUnwrap(byte[] wrappedKey,
String wrappedKeyAlgorithm,
int wrappedKeyType) |
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.
|
protected byte[] |
engineWrap(Key key) |
private boolean |
isAllZero(byte[] t) |
private byte[] |
KDF(byte[] z,
int klen) |
engineDoFinal, engineGetKeySize, engineUpdate, engineUpdateAAD, engineUpdateAADprivate ByteArrayOutputStream byteBuf
private MessageDigest digest
private SecureRandom random
private ECKey ecKey
private SM2Cipher.Mode outputMode
private int cipherMode
private int curveLength
public SM2Cipher()
throws NoSuchAlgorithmException
protected void engineSetMode(String mode) throws NoSuchAlgorithmException
engineSetMode 在类中 CipherSpimode - the cipher modeNoSuchAlgorithmException - if the requested cipher mode does
not existprotected void engineSetPadding(String padding) throws NoSuchPaddingException
engineSetPadding 在类中 CipherSpipadding - the padding mechanismNoSuchPaddingException - if the requested padding mechanism
does not existprotected int engineGetBlockSize()
engineGetBlockSize 在类中 CipherSpiprotected int engineGetOutputSize(int inputLen)
update
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 在类中 CipherSpiinputLen - the input length (in bytes)protected byte[] engineGetIV()
This is useful in the context of password-based encryption or decryption, where the IV is derived from a user-provided passphrase.
engineGetIV 在类中 CipherSpiprotected AlgorithmParameters engineGetParameters()
The returned parameters may be the same that were used to initialize this cipher, or may contain a combination of default and random parameter values used by the underlying cipher implementation if this cipher requires algorithm parameters but was not initialized with any.
engineGetParameters 在类中 CipherSpiprotected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
protected void engineInit(int opmode,
Key key,
SecureRandom random)
throws InvalidKeyException
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 在类中 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.UnsupportedOperationException - if opmode is
WRAP_MODE or UNWRAP_MODE is not implemented
by the cipher.protected void engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
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 在类中 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.UnsupportedOperationException - if opmode is
WRAP_MODE or UNWRAP_MODE is not implemented
by the cipher.protected void engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
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 在类中 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.UnsupportedOperationException - if opmode is
WRAP_MODE or UNWRAP_MODE is not implemented
by the cipher.protected byte[] engineUpdate(byte[] input,
int inputOffset,
int inputLen)
The first inputLen bytes in the input
buffer, starting at inputOffset inclusive, are processed,
and the result is stored in a new buffer.
engineUpdate 在类中 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
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 在类中 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 resultprotected byte[] engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
throws IllegalBlockSizeException,
BadPaddingException
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 在类中 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
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 在类中 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 storedoutputIllegalBlockSizeException - 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.ShortBufferException - 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 valueprivate byte[] encrypt(byte[] input,
int inputOffset,
int inputLen)
throws IOException,
InvalidKeyException
input - the input bufferinputOffset - the offset in input where the input
startsinputLen - the input lengthIOExceptionInvalidKeyExceptionprivate byte[] decrypt(byte[] input,
int inputOffset,
int inputLen)
throws IOException,
InvalidKeyException
input - the input bufferinputOffset - the offset in input where the input
startsinputLen - the input lengthIOExceptionInvalidKeyExceptionprivate byte[] KDF(byte[] z,
int klen)
private boolean isAllZero(byte[] t)
Copyright © 2024. All rights reserved.