C_EncryptInit, C_Encrypt, C_EncryptUpdate и C_EncryptFinal¶Предупреждение
При шифровании с использованием механизма CKM_GOST28147 длина данных должна быть кратной 8 байт.
C_EncryptInit(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.Запускается в режимах
См.также
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pEncryptedData, CK_ULONG_PTR pulEncryptedDataLen)¶| Параметры: |
|
|---|
Осуществляет единоразовое зашифрование, т.е зашифровывает только один блок данных. Шифрование выполняется по ГОСТ 28147-89.
Запускается в режимах
См.также
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_EncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart, CK_ULONG_PTR pulEncryptedPartLen)¶| Параметры: |
|
|---|
Продолжает составную операцию зашифрования – зашифровывает очередной блок данных (по ГОСТ 28147-89).
Запускается в режимах
См.также
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_EncryptFinal(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[] plainData = new byte[32];
// зашифрованное сообщение
byte[] encryptedData = new byte[32];
// длинна сообщений
LongRef dataLength = new LongRef(encryptedData.length);
// инициализация шифрования
rv = C.EncryptInit(session.value, encryptionMech, sessionKeyHandle.value);
if(rv != CKR.OK)
{
throw new CKRException("C.EncryptInit", rv);
}
// шифрование
rv = C.Encrypt(session.value, plainData, encryptedData, dataLength);
if(rv != CKR.OK)
{
throw new CKRException("C.Encrypt", rv);
}