C_VerifyInit
¶C_VerifyInit
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey)¶Параметры: |
|
---|
Инициализирует операцию проверки электронной подписи, имитовставки или значения HMAC.
Поддерживаемые механизмы:
CKM_GOSTR3410
(0x00001201
) – механизм для генерации и проверки ЭП,
соответствующий стандарту ГОСТ Р 34.10–2001.
Использует в качестве входного параметра ранее вычисленное 32-байтовое значение хэш-функции.CKM_GOSTR3410_WITH_GOSTR3411
(0x00001202
) – механизм для генерации и проверки
ЭП (ГОСТ Р 34.10–2001) с хэшированием (ГОСТ Р 34.11–94) подаваемых на вход данных.
Размер данных не ограничен.CKM_GOST28147_MAC
(0x00001223
) – механизм выработки и проверки имитовставки,
соответствующий стандарту ГОСТ 28147–89.
Размер входных данных не ограничен.CKM_GOSTR3410_256
– псевдоним для CKM_GOSTR3410
;CKM_GOSTR3410_WITH_GOSTR3411_2012_256
(CK_VENDOR_PKCS11_RU_TEAM_TC26 | 0x008
) – механизм для генерации и проверки
ЭП (ГОСТ Р 34.10–2012 (длина ключа 256 бит)) с хэшированием (ГОСТ Р 34.11–2012 (длина хэш–кода 256 бит)) подаваемых на вход данных.
Размер данных не ограничен.CKM_GOSTR3410_WITH_GOSTR3411_12_256
– псевдоним для CKM_GOSTR3410_WITH_GOSTR3411_2012_256
;CKM_GOSTR3411_2012_256_HMAC
(CK_VENDOR_PKCS11_RU_TEAM_TC26 | 0x014
) – механизм выработки и проверки имитовставки,
соответствующий стандарту ГОСТ Р 34.11–2012 (длина хэш–кода 256 бит);CKM_GOSTR3411_12_256_HMAC
– псевдоним для CKM_GOSTR3411_2012_256_HMAC
;CKM_GOSTR3411_2012_512_HMAC
(CK_VENDOR_PKCS11_RU_TEAM_TC26 | 0x015
) – механизм выработки и проверки имитовставки,
соответствующий стандарту ГОСТ Р 34.11–2012 (длина хэш–кода 512 бит);CKM_GOSTR3411_12_512_HMAC
– псевдоним для CKM_GOSTR3411_2012_512_HMAC
.CKM_RSA_PKCS
(0x00000001
) – механизм для генерации и проверки ЭП по алгоритму RSA. Может быть также
использован для зашифрования/расшифрования данных.CKM_SHA1_RSA_PKCS
(0x00000006
) – механизм для генерации и проверки ЭП (RSA) с предварительным
хэшированием по алгоритму SHA-1.CKM_SHA256_RSA_PKCS
(0x00000040
) – механизм для генерации и проверки ЭП (RSA) с предварительным
хэшированием по алгоритму SHA-256.CKM_DES3_MAC
(0x00000134
) – механизм для формирования и проверки имитовставки фиксированной длины
на основе triple-DES. Ограничение длины выхода – 4 байт.CKM_DES3_MAC_GENERAL
(0x00000135
) – механизм для формирования и проверки имитовставки произвольной
длины на основе triple-DES.CKM_MD5_HMAC
(0x00000211
) – механизм для формирования и проверки имитовставки на основе MD5.CKM_SHA_1_HMAC
(0x00000221
) – механизм для формирования и проверки имитовставки на основе SHA-1.CKM_SHA256_HMAC
(0x00000251
) – механизм для формирования и проверки имитовставки на основе SHA-256.CKM_SHA384_HMAC
(0x00000261
) – механизм для формирования и проверки имитовставки на основе SHA-384.CKM_SHA512_HMAC
(0x00000271
) – механизм для формирования и проверки имитовставки на основе SHA-512.CKM_CMS_SIG
(0x00000500
) – механизм для генерации и проверки ЭП в формате CMS.CKM_ECDSA
(0x00001041
) – механизм для генерации и проверки ЭП по алгоритму ECDSA.CKM_ECDSA_SHA1
(0x00001042
) – механизм для генерации и проверки ЭП (ECDSA) с предварительным
хэшированием по алгоритму SHA1.CKM_ECDSA_SHA256
(0x00001043
) – механизм для генерации и проверки ЭП (ECDSA) с предварительным
хэшированием по алгоритму SHA256.CKM_AES_MAC
(0x00001083
) – механизм для формирования и проверки имитовставки фиксированной длины
на основе AES. Ограничение длины выхода – 8 байт.CKM_AES_MAC_GENERAL
(0x00001084
) – механизм для формирования и проверки имитовставки произвольной
длины на основе AES.Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_Verify
¶C_Verify
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)¶Параметры: |
|
---|
Осуществляет единоразовую проверку подписи, т.е проверяет только один блок данных.
Либо проверяет значение HMAC для одного блока данных, проверяет значение имитовставки
для одного блока данных – конкретная операция зависит от того,
с каким значением параметра pMechanism
была инициализирована операция проверки.
Примечание
В случае инициализации операции проверки (см. C_VerifyInit()
) с механизмом
CKM_GOSTR3410
размер данных должен быть 32-байта.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_VerifyUpdate
¶C_VerifyUpdate
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)¶Параметры: |
|
---|
Продолжает составную операцию проверки подписи – проверяет очередной блок данных, проверяет HMAC или имитовставку для очередного блока данных.
При работе с апплетом Криптотокен функция C_VerifyUpdate()
поддерживает только механизмы CKM_GOSTR3410_WITH_GOSTR3411
и CKM_GOST28147_MAC
.
Примечание
Механизмы, используемые в процессе выработки электронной подписи или имитовставки предварительно задаются функцией C_VerifyInit()
.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_VerifyFinal
¶C_VerifyFinal
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)¶Параметры: |
|
---|
Завершает операцию проверки подписи, проверки HMAC или проверки имитовставки.
При работе с апплетом Криптотокен функция C_VerifyFinal()
поддерживает только механизмы CKM_GOSTR3410_WITH_GOSTR3411
и CKM_GOST28147_MAC
.
Примечание
Механизмы, используемые в процессе выработки электронной подписи или имитовставки предварительно задаются функцией C_VerifyInit()
.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Для обеспечения успешного проверки данных, необходимо, чтобы функции в алгоритме были использованы в одной из следующих последовательностей:
Для единоразовой операции проверки | Для составной операции проверки |
---|---|
|
Пример проверки ЭП по ГОСТ Р 34.10–2001 на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// дескриптор открытого ключа
CK_OBJECT_HANDLE pubKeyHandle;
// механизм для формирования ЭП по ГОСТ Р34.10-2001
CK_MECHANISM mech = { CKM_GOSTR3410, NULL_PTR, 0 };
// хэш от данных, на который вычислялась подпись
CK_BYTE hash[32];
// подпись хэша
CK_BYTE signature[64];
// длина подписи
CK_ULONG signatureLength = sizeof(signature);
// инициализируем проверку подписи
rv = C_VerifyInit(session, &mech, pubKeyHandle);
if(rv != CKR_OK)
{
PrintError("C_VerifyInit", rv);
return;
}
// проверяем подпись
rv = C_Verify(session, hash, sizeof(hash), signature, signatureLength);
if(rv != CKR_OK)
{
PrintError("C_Verify", rv);
return;
}
Пример проверки ЭП по ГОСТ Р 34.10–2012 (длина ключа 256 бит) на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// дескриптор открытого ключа
CK_OBJECT_HANDLE pubKeyHandle;
// механизм для формирования ЭП по ГОСТ Р 34.10-2012 с хешированием по ГОСТ Р 34.11-2012
CK_MECHANISM mech = { CKM_GOSTR3410_WITH_GOSTR3411_12_256, NULL_PTR, 0 };
// данные, на которые вычислялась подпись
CK_BYTE data[128];
// подпись данных
CK_BYTE signature[64];
// длина подписи
CK_ULONG signatureLength = sizeof(signature);
// инициализируем проверку подписи
rv = C_VerifyInit(session, &mech, pubKeyHandle);
if(rv != CKR_OK)
{
PrintError("C_VerifyInit", rv);
return;
}
// проверяем подпись
rv = C_Verify(session, data, sizeof(data), signature, signatureLength);
if(rv != CKR_OK)
{
PrintError("C_Verify", rv);
return;
}
Пример проверки ЭП по RSA с предварительным хэшированием по SHA-1 на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// дескриптор открытого ключа
CK_OBJECT_HANDLE pubKeyHandle = 0;
// механизм для проверки ЭП по RSA с предварительным хэшированием по SHA-1
CK_MECHANISM mech = { CKM_SHA1_RSA_PKCS, NULL_PTR, 0 };
// данные, на которые вычислялась подпись
CK_BYTE data[128];
// подпись данных. Длина подписи зависит от ключа, который использовался при ее создании
CK_BYTE signature[64];
// длина подписи
CK_ULONG signatureLength = sizeof(signature);
// инициализируем проверку подписи
rv = C_VerifyInit(session, &mech, pubKeyHandle);
if(rv != CKR_OK)
{
PrintError("C_VerifyInit", rv);
return;
}
// проверяем подпись
rv = C_Verify(session, data, sizeof(data), signature, &signatureLength);
if(rv != CKR_OK)
{
PrintError("C_Verify", rv);
return;
}