C_DigestInit
¶C_DigestInit
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism)¶Параметры: |
|
---|
Инициализирует операцию хэширования.
Поддерживаемые механизмы хэширования:
Криптотокен
CKM_GOSTR3411
(0x00001210
) – механизм хеширования, соответствующий стандарту ГОСТ Р 34.11–94.
В зависимости от значений второго и третьего полей структуры CK_MECHANISM
(см. таблицу ниже), вычисление
хэш-последовательности выполняется аппаратно, т. е. с использованием криптографических возможностей устройства
eToken ГОСТ или JaCarta ГОСТ, либо программно.
pParameter |
ulParameterLen |
Способ вычисления хэш-последовательности |
---|---|---|
NULL_PTR |
0 |
Аппаратный (средствами JaCarta ГОСТ) |
0x06 0x07 0x2A 0x85 0x03
0x02 0x02 0x1E 0x01 |
9 |
Программный (используется набор эталонных параметров
id-GostR3411-94-CryptoProParamSet , определённый в RFC 4357. |
Криптотокен 2 ЭП
CKM_GOSTR3411
(0x00001210
) – механизм хеширования, соответствующий стандарту ГОСТ Р 34.11–94;CKM_GOSTR3411_2012_256
(CK_VENDOR_PKCS11_RU_TEAM_TC26 | 0x012
) – механизм хеширования по ГОСТ Р 34.11–2012 (длина хэш–кода 256 бит);CKM_GOSTR3411_12_256
– псевдоним для CKM_GOSTR3411_2012_256
;CKM_GOSTR3411_2012_512
(CK_VENDOR_PKCS11_RU_TEAM_TC26 | 0x013
) – механизм хеширования по ГОСТ Р 34.11–2012 (длина хэш–кода 512 бит);CKM_GOSTR3411_12_512
– псевдоним для CKM_GOSTR3411_2012_512
.Laser
CKM_MD5
(0x00000210
) – механизм хеширования данных по алгоритму MD5;CKM_SHA_1
(0x00000220
) – механизм хеширования данных по алгоритму SHA-1;CKM_SHA256
(0x00000250
) – механизм хеширования данных по алгоритму SHA-256;CKM_SHA384
(0x00000260
) – механизм хеширования данных по алгоритму SHA-384;CKM_SHA512
(0x00000270
) – механизм хеширования данных по алгоритму SHA-512.Запускается в режимах
Для Криптотокен 2 ЭП:
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_Digest
¶C_Digest
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen)¶Параметры: |
|
---|
Осуществляет единоразовое хэширование, т.е хэширует только один блок данных.
Запускается в режимах
Для Криптотокен 2 ЭП:
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_DigestUpdate
¶C_DigestUpdate
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)¶Параметры: |
|
---|
Продолжает составную операцию хэширования – хэширует очередной блок данных.
Запускается в режимах
Для Криптотокен 2 ЭП:
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_DigestFinal
¶C_DigestFinal
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen)¶Параметры: |
|
---|
Завершает составную операцию хеширования.
Запускается в режимах
Для Криптотокен 2 ЭП:
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Для обеспечения успешного хэширования данных, необходимо, чтобы функции в алгоритме были использованы в одной из следующих последовательностей:
Для единоразовой операции хэширования | Для составной операции хэширования |
---|---|
|
Вычисление хэш-последовательности по ГОСТ Р 34.11–94 на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// исходные данные для хэширования
CK_BYTE buffer[1024];
// механизм для вычисления хэш-последовательности по ГОСТ Р 34.11-94
// вычислять значение хеш-функции аппаратно
CK_MECHANISM mech = { CKM_GOSTR3411, NULL_PTR, 0 };
// результирующие данные для хэш-значения
// согласно CKM_GOSTR3411 длина хэша - 32 байта (256 бит)
CK_BYTE hash[32];
// размер хэш-последовательности
// согласно CKM_GOSTR3411 длина хэша - 32 байта (256 бит)
CK_ULONG hashLen = 32;
// функция задает механизм для вычисления хэш-последовательности
rv = C_DigestInit(session, &mech);
if(rv != CKR_OK)
{
PrintError("C_DigestInit", rv);
return;
}
// функция вычисляет хэш-последовательность
rv = C_Digest(session, buffer, sizeof(buffer), hash, &hashLen);
if(rv != CKR_OK)
{
PrintError("C_Digest", rv);
return;
}
Вычисление хэш-последовательности по ГОСТ Р 34.11–2012 (длина хэш–кода 256 бит) на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// исходные данные для хэширования
CK_BYTE buffer[1024];
// механизм для вычисления хэш-последовательности по ГОСТ Р 34.11-2012 (длина хэш-кода 256 бит)
// вычислять значение хеш-функции аппаратно
CK_MECHANISM mech = { CKM_GOSTR3411_2012_256, NULL_PTR, 0 };
// результирующие данные для хэш-значения
// согласно CKM_GOSTR3411_2012_256 длина хэша - 32 байта (256 бит)
CK_BYTE hash[32];
// размер хэш-последовательности
// согласно CKM_GOSTR3411_2012_256 длина хэша - 32 байта (256 бит)
CK_ULONG hashLen = 32;
// функция задает механизм для вычисления хэш-последовательности
rv = C_DigestInit(session, &mech);
if(rv != CKR_OK)
{
PrintError("C_DigestInit", rv);
return;
}
// функция вычисляет хэш-последовательность
rv = C_Digest(session, buffer, sizeof(buffer), hash, &hashLen);
if(rv != CKR_OK)
{
PrintError("C_Digest", rv);
return;
}
Вычисление хэш-последовательности по ГОСТ Р 34.11–2012 (длина хэш–кода 512 бит) на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// исходные данные для хэширования
CK_BYTE buffer[1024];
// механизм для вычисления хэш-последовательности по ГОСТ Р 34.11-2012 (длина хэш-кода 512 бит)
// вычислять значение хеш-функции аппаратно
CK_MECHANISM mech = { CKM_GOSTR3411_2012_512, NULL_PTR, 0 };
// результирующие данные для хэш-значения
// согласно CKM_GOSTR3411_2012_512 длина хэша - 64 байта (512 бит)
CK_BYTE hash[64];
// размер хэш-последовательности
// согласно CKM_GOSTR3411_2012_512 длина хэша - 64 байта (512 бит)
CK_ULONG hashLen = 64;
// функция задает механизм для вычисления хэш-последовательности
rv = C_DigestInit(session, &mech);
if(rv != CKR_OK)
{
PrintError("C_DigestInit", rv);
return;
}
// функция вычисляет хэш-последовательность
rv = C_Digest(session, buffer, sizeof(buffer), hash, &hashLen);
if(rv != CKR_OK)
{
PrintError("C_Digest", rv);
return;
}