C_DecryptInit
, C_Decrypt
, C_DecryptUpdate
и C_DecryptFinal
¶Предупреждение
При шифровании с использованием механизма CKM_GOST28147_ECB
длина данных должна быть кратной 8 байт.
Примечание
Функции C_Decrypt()
, C_DecryptUpdate()
и C_DecryptFinal()
не возвращают предусмотренного
стандартом PKCS #11 кода ошибки CKR_ENCRYPTED_DATA_INVALID
(недопустимые зашифрованные данные).
C_DecryptInit
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey)¶Параметры: |
|
---|
Инициализирует и задает параметры для операции расшифрования (по ГОСТ 28147-89). Поддерживается как аппаратное, так и программное расшифрование.
Механизм расшифрования задаётся в поле mechanism
структуры CK_MECHANISM
. Для расшифрования библиотека
Cryptoki поддерживает механизмы, перечисленные ниже.
CKM_GOST28147
(0x00001221
) – механизм для симметричного шифра в режиме
ECB по стандарту ГОСТ 28147-89;CKM_GOST28147
(0x00001222
) – механизм для симметричного шифра в режиме CFB по
стандарту ГОСТ 28147-89.CKM_RSA_PKCS
(0x00000001
) – механизм для ассиметричного шифра RSA. Также используется для ЭП;CKM_RSA_PKCS_OAEP
(0x00000009
) – механизм для ассиметричного шифра RSA с использованием
OAEP;CKM_DES3_ECB
(0x00000132
) – механизм для симметричного шифра triple-DES в режиме ECB;CKM_DES3_CBC
(0x00000133
) – механизм для симметричного шифра triple-DES в режиме CBC;CKM_AES_ECB
(0x00001081
) – механизм для симметричного шифра AES
в режиме ECB;CKM_AES_CBC
(0x00001082
) – механизм для симметричного шифра AES в режиме CBC.Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_Decrypt
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData, CK_ULONG_PTR pulEncryptedDataLen, CK_BYTE_PTR pData, CK_ULONG ulDataLen, )¶Параметры: |
|
---|
Осуществляет единоразовое расшифрование (по ГОСТ 28147-89), т.е расшифровывает только один блок данных.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_DecryptUpdate
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart, CK_ULONG_PTR pulEncryptedPartLen)¶Параметры: |
|
---|
Продолжает составную операцию расшифрования – расшифровывает очередной блок данных.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_DecryptFinal
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastEncryptedPart, CK_ULONG_PTR pulLastEncryptedPartLen)¶Параметры: |
|
---|
Завершает составную операцию расшифрования.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Для обеспечения успешного расшифрования данных, необходимо, чтобы функции в алгоритме были использованы в одной из следующих последовательностей:
Для единоразовой операции расшифрования | Для составной операции расшифрования |
---|---|
|
Пример расшифрования для ОС Android на языке Java:
// дескриптор сессии
LongRef session = new LongRef();
// дескриптор сессионного ключа
LongRef sessionKeyHandle = new LongRef();
// механизм для шифрования данных
CKM encryptionMech = new CKM(CKM.GOST28147, null);
// зашифрованное сообщение
byte[] encryptedData = new byte[32];
// расшифрованное сообщение
byte[] decryptedData = new byte[32];
// длинна сообщений
LongRef dataLength = new LongRef(encryptedData.length);
// инициализация расшифрования
rv = C.DecryptInit(session.value, encryptionMech, sessionKeyHandle.value);
if(rv != CKR.OK)
{
throw new CKRException("C.DecryptInit", rv);
}
// расшифрование
rv = C.Decrypt(session.value, encryptedData, decryptedData, dataLength);
if(rv != CKR.OK)
{
throw new CKRException("C.Decrypt", rv);
}