...
Code Block | ||
---|---|---|
| ||
CK_BYTE_PTR pJournal = NULL_PTR; // Указатель на значение журнала CK_ULONG ulJournalSize = 0; // Размер журнала while(TRUE) { ... /* Получить размер журнала */ printf("Getting journal size"); rv = pFunctionListEx->C_EX_GetJournal(aSlots[0], // Хэндл слота с подключенным токеном NULL_PTR, // Указатель на журнал &ulJournalSize);// Размер журнала if (rv != CKR_OK) { printf(" -> Failed\n"); break; } printf(" -> OK\n"); pJournal = (CK_BYTE*)malloc(ulSlotCount * sizeof(CK_BYTE)); if (pJournal == NULL) { printf("Memory allocation for pJournal failed! \n"); break; } memset(pJournal, 0, (ulJournalSize * sizeof(CK_BYTE))); /* Получить журнал */ printf("Getting journal"); rv = pFunctionListEx->C_EX_GetJournal(aSlots[0], // Хэндл слота с подключенным токеном pJournal, // Указатель на журнал &ulJournalSize);// Размер журнала if (rv != CKR_OK) { printf(" -> Failed %X\n", (int)rv); break; } printf(" -> OK\n"); ... break; } |
Функции для работы с
...
AUI Button | ||||||
---|---|---|---|---|---|---|
|
C_EX_SignInvisibleInit()
Назначение
Функция инициализирует процесс подписи сообщения без отображения на экране.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SignInvisibleInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
Параметры
hSession | [in] | дескриптор сессии |
pMechanism | [in] | механизм подписи |
hKey | [in] | дескриптор ключа для подписи |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
/* Набор параметров КриптоПро алгоритма ГОСТ Р 34.11-1994 */
CK_BYTE GOST3411params[] = { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1e, 0x01 };
/* Механизм подписи подписи по алгоритму ГОСТ Р 34.10-2001 с хешированием по алгоритму ГОСТ Р 34.11-94*/
CK_MECHANISM HashSigVerMech = {CKM_GOSTR3410_WITH_GOSTR3411, GOST3411params, sizeof(GOST3411params)};
while(TRUE)
{
...
/* Инициализировать операцию подписи данных */
printf("C_EX_SignInvisibleInit");
rv = pFunctionList->C_EX_SignInvisibleInit(hSession, // Хэндл сессии
&HashSigVerMech , // Механизм подписи
hPrivateKey ); // Хэндл закрытого ключа
if (rv != CKR_OK)
{
printf(" -> Failed\n");
break;
}
printf(" -> OK\n");
} |
C_EX_SignInvisible()
Назначение
Функция осуществляет процесс подписи сообщения без отображения на экране, вызывается после функции C_EX_SignInvisibleInit.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SignInvisible)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
); |
Параметры
hSession | [in] | дескриптор сессии |
pData | [in] | указатель на буфер данных для подписи |
ulDataLen | [in] | размер данных для подписи в байтах |
pSignature | [out] | указатель на буфер с подписью |
pulSignatureLen | [out] | размер буфера с подписью |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
/* Данные для подписи в виде двоичной строки */
CK_BYTE pbtData[] = { 0x3C, 0x21, 0x50, 0x49, 0x4E, 0x50, 0x41, 0x44, 0x46, 0x49, 0x4C, 0x45, 0x20, 0x52, 0x55, 0x3E,
0x3C, 0x21, 0x3E, 0xED, 0xE5, 0xE2, 0xE8, 0xE4, 0xE8, 0xEC, 0xFB, 0xE9, 0x20, 0xF2, 0xE5, 0xEA,
0xF1, 0xF2, 0x3C, 0x4E, 0x3E, 0xD4, 0xC8, 0xCE, 0x3A, 0x3C, 0x56, 0x3E, 0xCF, 0xE5, 0xF2, 0xF0,
0xEE, 0xE2, 0x20, 0xCF, 0xE5, 0xF2, 0xF0, 0x20, 0xCF, 0xE5, 0xF2, 0xF0, 0xEE, 0xE2, 0xE8, 0xF7,
0x20, 0xCC, 0xEE, 0xF1, 0xEA, 0xE2, 0xE0, 0x2C, 0x20, 0xCF, 0xE8, 0xEE, 0xED, 0xE5, 0xF0, 0xF1,
0xEA, 0xE0, 0xFF, 0x20, 0xF3, 0xEB, 0x2C, 0x20, 0xE4, 0x2E, 0x20, 0x33, 0x2C, 0x20, 0xEA, 0xE2,
0x2E, 0x20, 0x37, 0x32 };
CK_BYTE_PTR pbtSignature = NULL_PTR; // Указатель на буфер, содержащий подпись для исходных данных
CK_ULONG ulSignatureSize = 0; // Размер буфера, содержащего подпись для исходных данных, в байтах
while(TRUE)
{
...
/* Определить размер подписи*/
printf("C_EX_SignInvisible step 1");
rv = pFunctionList->C_EX_SignInvisible(hSession, // Хэндл сессии
pbtData, // Буфер с данными для подписи
arraysize(pbtData), // Длина подписываемых данных
pbtSignature, // Буфер с подписью
&ulSignatureSize); // Длина подписи
if (rv != CKR_OK)
{
printf(" -> Failed\n");
break;
}
printf(" -> OK\n");
pbtSignature = (CK_BYTE*)malloc(ulSignatureSize);
if (pbtSignature == NULL)
{
printf("Memory allocation for pbtSignature failed! \n");
break;
}
memset( pbtSignature,
0,
ulSignatureSize * sizeof(CK_BYTE));
/* Подписать исходные данные */
printf("C_EX_SignInvisible step 2");
rv = pFunctionList->C_EX_SignInvisible(hSession, // Хэндл сессии
pbtData, // Буфер с данными для подписи
arraysize(pbtData), // Длина подписываемых данных
pbtSignature, // Буфер с подписью
&ulSignatureSize); // Длина подписи
if (rv != CKR_OK)
{
printf(" -> Failed\n");
break;
}
printf(" -> OK\n");
} |
Функции для работы с беспроводным каналом связи
AUI Button | ||||||
---|---|---|---|---|---|---|
|
C_EX_LoadActivationKey()
Назначение
Активирует защищенный канал связи с токеном с использованием пароля (поддерживается только в 20-й версии прошивки)
...
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_LoadActivationKey)( CK_SESSION_HANDLE hSession, CK_BYTE_PTR key, CK_ULONG keySize ); |
Параметры
hSession | [in] | дескриптор сессии |
key | [in] | указатель на пароль |
keySize | [in] | длина пароля |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
...
C_EX_SetActivationPassword()
Назначение
Активирует защищенный канал связи с токеном с использованием пароля (поддерживается с 21-й версии прошивки).
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SetActivationPassword)( CK_SLOT_ID slotID, CK_UTF8CHAR_PTR password ); |
Параметры
hSession | [in] | дескриптор сессии |
password | [in] | пароль активации |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
...
C_EX_GenerateActivationPassword()
Назначение
Генерирует пароль для активации защищенного канала связи с токеном.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_GenerateActivationPassword)( CK_SESSION_HANDLE hSession, CK_ULONG ulPasswordNumber, CK_UTF8CHAR_PTR pPassword, CK_ULONG_PTR pulPasswordSize, CK_ULONG ulPasswordCharacterSet ); |
Параметры
hSession | [in] | дескриптор сессии |
ulPasswordNumber | порядковый номер генерируемого пароля. Допустимые значения от 1 до 6 и
| |
pPassword | [out] | указатель на буфер, содержащий сгенерированный пароль |
pulPasswordSize | [out] | размер буфера |
ulPasswordCharacterSet | [in] | набор допустимых символов:
|
Возвращаемые значения
CKR_OK – функция выполнена успешно.
C_EX_TokenManage()
Назначение
Управляет режимом работы токена и таймаутом беспроводного соединения Рутокен Bluetooth.
...
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_TokenManage)( CK_SESSION_HANDLE hSession, CK_ULONG ulMode, CK_VOID_PTR pValue ); |
Параметры
hSession | [in] | дескриптор сессии |
ulMode | [in] | режим работы функции:
|
pValue | [in] |
1 .. 0х46 – произвольное значение в минутах, от 1 минуты до 70 минут
|
Возвращаемые значения
CKR_OK – функция выполнена успешно.
...
Функции системного назначeния
C_EX_SlotManage
Назначение
Позволяет выполнить расширенную инициализацию токена, получить значение имитовставки токена и расширенную информацию о всех локальных PIN-кодах токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SlotManage)( CK_SESSION_HANDLE hSession, CK_ULONG ulMode, CK_VOID_PTR pValue ); |
Параметры
hSession | [in] | дескриптор сессии |
ulMode | [in] | режим работы функции:
|
pValue | [out] | указатель на буфер с возвращаемым значением (зависит от значения аргумента ulMode). |
...
ulPinID | [in] | идентификатор PIN-кода |
ulMinSize | [out] | заданная минимальная длина PIN-кода |
ulMaxSize | [out] | заданная максимальная длина PIN-кода |
ulMaxRetryCount | [out] | заданное максимальное значение счетчика неверных попыток ввода пароля |
ulCurrentRetryCount | [out] | текущее значение счетчика оставшихся попыток ввода пароля: 0 – PIN-код заблокирован |
flags | [out] | информационные флаги:
|
Возвращаемые значения
CKR_OK – функция выполнена успешно.
...
Функции для работы с ключами в оперативной памяти
C_EX_WrapKey
Назначение
Генерирует сессионный ключ, вычисляет ключ согласования, шифрует сессионный ключ ключом согласования и возвращает указатель на дескриптор сессионного ключа, хранящегося в оперативной памяти токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_WrapKey)( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pGenerationMechanism, CK_ATTRIBUTE_PTR pKeyTemplate, CK_ULONG ulKeyAttributeCount, CK_MECHANISM_PTR pDerivationMechanism, CK_OBJECT_HANDLE hBaseKey, CK_MECHANISM_PTR pWrappingMechanism, CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pulWrappedKeyLen, CK_OBJECT_HANDLE_PTR phKey ); |
Параметры
hSession | [in] | дескриптор сессии |
pGenerationMechanism | [in] | механизм генерации сессионного ключа. Допустимое значение: CKM_GOST28147_KEY_GEN – по стандарту ГОСТ 28147-89 |
pKeyTemplate | [in] | указатель на буфер, содержащий шаблон сессионого ключа |
ulKeyAttributeCount | [in] | количество атрибутов сессионого ключа в шаблоне |
pDerivationMechanism | [in] | механизм выработки ключа согласования. Допустимые значения: CKM_GOSTR3410_DERIVE – по стандарту ГОСТ Р 34.10-2001 |
hBaseKey | [in] | дескриптор закрытого ключа для формирования ключа согласования |
pWrappingMechanism | [in] | механизм шифрования сессионного ключа |
pWrappedKey | [in] | указатель на зашифрованный сессионный ключ |
pulWrappedKeyLen | [in] | длина зашифрованного сессионного ключа |
phKey | [out] | указатель на сессионый ключ (CEK) |
C_EX_UnwrapKey
Назначение
Вычисляет ключ согласования, расшифровывает зашифрованный сессионный ключ и возвращает указатель на дескриптор расшифрованного сессионного ключа, хранящего в оперативной памяти токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_UnwrapKey)( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pDerivationMechanism, CK_OBJECT_HANDLE hBaseKey, CK_MECHANISM_PTR pUnwrappingMechanism, CK_BYTE_PTR pWrappedKey, CK_ULONG ulWrappedKeyLen, CK_ATTRIBUTE_PTR pKeyTemplate, CK_ULONG ulKeyAttributeCount, CK_OBJECT_HANDLE_PTR phKey ); |
Параметры
hSession | [in] | дескриптор сессии |
pDerivationMechanism | [in] | механизм выработки ключа согласования (KEK). Допустимые значения: CKM_GOSTR3410_DERIVE – по стандарту ГОСТ Р 34.10-2001 |
hBaseKey | [in] | дескриптор закрытого ключа для формирования ключа согласования |
pUnwrappingMechanism | [in] | механизм расшифрования зашифрованного сессионного ключа |
pWrappedKey | [in] | указатель на зашифрованный сессионный ключ |
ulWrappedKeyLen | [in] | длина зашифрованного сессионного ключа |
pKeyTemplate | [in] | указатель на буфер, содержащий шаблон сессионного ключа |
ulKeyAttributeCount | [in] | количество атрибутов сессионного ключа в шаблоне |
phKey | [out] | указатель на дескриптор сессионного ключа (CEK) |
...
Вспомогательные функции
C_EX_FreeBuffer()
Назначение
Функция освобождает память, выделенную другими расширенными функциями, например C_EX_GetCertificateInfoText.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_FreeBuffer)( CK_BYTE_PTR pBuffer ); |
Параметры
pBuffer | [in] | указатель на буфер |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE_PTR pInfo . . rv = pfGetFunctionListEx -> C_EX_FreeBuffer(pInfo); // очистка буфера, использующегося функцией C_EX_GetCertificateInfoText() if (rv != CKR_OK) // проверка результата printf("C_EX_FreeBuffer() -> failed \n"); else printf("C_EX_FreeBuffer() -> OK \n"); |
...