C_SignInit¶C_SignInit(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_Sign¶C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)¶| Параметры: |
|
|---|
Осуществляет единоразовую подпись, т.е подписывает только один блок данных. Либо вычисляет HMAC от одного блока данных, вырабатывает имитовставку от одного блока данных – конкретная операция зависит от того, с каким значением параметра pMechanism была инициализирована операция подписи.
Примечание
Если операция подписи инициализирована с механизмом CKM_GOSTR3410 (см. C_SignInit()), то поддерживается только 32-байтовый размер данных.
Запускается в режимах
См.также
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_SignUpdate¶C_SignUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)¶| Параметры: |
|
|---|
Продолжает составную операцию подписи – подписывает очередной блок данных, вычисляет HMAC или вырабатывает имитовставку для очередного блока данных.
При работе с апплетом Криптотокен функция C_SignUpdate() поддерживает только механизмы CKM_GOSTR3410_WITH_GOSTR3411 и CKM_GOST28147_MAC.
Примечание
Механизмы, используемые в процессе выработки электронной подписи или имитовставки предварительно задаются функцией C_SignInit().
Запускается в режимах
См.также
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_SignFinal¶C_SignFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)¶| Параметры: |
|
|---|
Завершает составную операцию подписи, вычисления HMAC или выработки имитовставки.
При работе с апплетом Криптотокен функция C_SignFinal() поддерживает только механизмы CKM_GOSTR3410_WITH_GOSTR3411 и CKM_GOST28147_MAC.
Примечание
Механизмы, используемые в процессе выработки электронной подписи или имитовставки предварительно задаются функцией C_SignInit().
Запускается в режимах
См.также
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
Для обеспечения успешной подписи данных, необходимо, чтобы функции в алгоритме были использованы в одной из следующих последовательностей:
| Для единоразовой операции подписи | Для составной операции подписи |
|---|---|
|
Пример выработки ЭП по ГОСТ Р 34.10–2001 на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// механизм для формирования ЭП по ГОСТ Р34.10-2001
CK_MECHANISM mech = { CKM_GOSTR3410, NULL_PTR, 0 };
// дескриптор закрытого ключа
CK_OBJECT_HANDLE privKeyHandle;
// подписываемый хэш от данных
CK_BYTE hash[32];
// буфер для результирующей подписи
CK_BYTE signature[64];
// длина буфера подписи
CK_ULONG signatureLength = sizeof(signature);
// инициализируем операцию подписи
rv = C_SignInit(session, &mech, privKeyHandle);
if(rv != CKR_OK)
{
PrintError("C_SignInit", rv);
return;
}
// подписываем хэш
rv = C_Sign(session, hash, sizeof(hash), signature, &signatureLength);
if(rv != CKR_OK)
{
PrintError("C_Sign", rv);
return;
}
Пример выработки ЭП по ГОСТ Р 34.10–2012 (длина ключа 256 бит) на языке C:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// механизм для формирования ЭП по ГОСТ Р 34.10-2012 с хешированием по ГОСТ Р 34.11-2012
CK_MECHANISM mech = { CKM_GOSTR3410_WITH_GOSTR3411_12_256, NULL_PTR, 0 };
// дескриптор закрытого ключа
CK_OBJECT_HANDLE privKeyHandle;
// подписываемые данные
CK_BYTE data[128];
// буфер для результирующей подписи
CK_BYTE signature[64];
// длина буфера подписи
CK_ULONG signatureLength = sizeof(signature);
// инициализируем операцию подписи
rv = C_SignInit(session, &mech, privKeyHandle);
if(rv != CKR_OK)
{
PrintError("C_SignInit", rv);
return;
}
// подписываем данные
rv = C_Sign(session, data, sizeof(data), signature, &signatureLength);
if(rv != CKR_OK)
{
PrintError("C_Sign", rv);
return;
}
Пример выработки ЭП по RSA с предварительным хэшированием по SHA-1 на языке C++:
// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// механизм для формирования ЭП по RSA с предварительным хэшированием по SHA-1
CK_MECHANISM mech = { CKM_SHA1_RSA_PKCS, NULL_PTR, 0 };
// дескриптор закрытого ключа
CK_OBJECT_HANDLE privKeyHandle;
// подписываемые данные
CK_BYTE data[128];
// буфер для результирующей подписи. Длина подписи зависит от ключа, который использовался при ее создании
std::vector<CK_BYTE> signature(1, 0);
// длина буфера подписи
CK_ULONG signatureLength = sizeof(data);
// инициализируем операцию подписи
rv = C_SignInit(session, &mech, privKeyHandle);
if(rv != CKR_OK)
{
PrintError("C_SignInit", rv);
return;
}
// подписываем данные
rv = C_Sign(session, data, sizeof(data), &signature.at(0), &signatureLength);
if(rv != CKR_OK)
{
PrintError("C_Sign", rv);
return;
}