Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
collapsetrue
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
button-stylePrimary
button-textподробнее про подпись без отображения
button-urlhttps://dev.rutoken.ru/pages/viewpage.action?pageId=13795364#id-%D0%92%D1%81%D1%82%D1%80%D0%B0%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%A0%D1%83%D1%82%D0%BE%D0%BA%D0%B5%D0%BD%D1%87%D0%B5%D1%80%D0%B5%D0%B7PKCS#11-%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%B8%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%D0%BD%D0%B0%D0%A0%D1%83%D1%82%D0%BE%D0%BA%D0%B5%D0%BDPINPad

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
collapsetrue
/* Набор параметров КриптоПро алгоритма ГОСТ Р 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
collapsetrue
/* Данные для подписи в виде двоичной строки */
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
button-stylePrimary
button-textподробнее про Secure Messaging
button-urlhttps://dev.rutoken.ru/pages/viewpage.action?pageId=10059883
 

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 и

GENERATE_NEXT_PASSWORD – генерировать следующий пароль (только для 21-й версии микропрограммы)

pPassword

[out] указатель на буфер, содержащий сгенерированный пароль

pulPasswordSize

[out]размер буфера

ulPasswordCharacterSet

[in]

набор допустимых символов:

CAPS_AND_DIGITS – заглавные буквы латинского алфавита без O и цифры без 0
CAPS_ONLY – заглавные буквы латинского алфавита

Возвращаемые значения

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]

режим работы функции:

MODE_SET_BLUETOOTH_POWEROFF_TIMEOUT – установить таймаут для беспроводного канала связи
MODE_SET_CHANNEL_TYPE – установить тип используемого канала связи

pValue

[in] 
  • значение таймаута для режима MODE_SET_BLUETOOTH_POWEROFF_TIMEOUT:

1 .. 0х46 – произвольное значение в минутах, от 1 минуты до 70 минут
BLUETOOTH_POWEROFF_TIMEOUT_DEFAULT – по умолчанию
BLUETOOTH_POWEROFF_TIMEOUT_MAX – максимальное значение (70 минут)

  • канал связи для режима MODE_SET_CHANNEL_TYPE:

CHANNEL_TYPE_USB – по шине USB
CHANNEL_TYPE_BLUETOOTH – по Bluetooth

Возвращаемые значения

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]

режим работы функции:

MODE_GET_LOCAL_PIN_INFO – получение информации о локальных PIN-кодах

pValue

[out] указатель на буфер с возвращаемым значением (зависит от значения аргумента ulMode).

...

ulPinID

[in]

идентификатор PIN-кода

ulMinSize

[out]

заданная минимальная длина PIN-кода

ulMaxSize

[out] 

заданная максимальная длина PIN-кода

ulMaxRetryCount

[out] заданное максимальное значение счетчика неверных попыток ввода пароля

ulCurrentRetryCount

[out] 

текущее значение счетчика оставшихся попыток ввода пароля:

0 – PIN-код заблокирован

flags

[out] 

информационные флаги:

LOCAL_PIN_FLAGS_NOT_DEFAULT – локальный PIN-код не является PIN-кодом по умолчанию
LOCAL_PIN_FLAGS_FROM_SCREENPIN-код может введен только с экрана

Возвращаемые значения

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
CKM_GOSTR3410_12_DERIVE – по стандарту ГОСТ Р 34.10-2012

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
CKM_GOSTR3410_12_DERIVE – по стандарту ГОСТ Р 34.10-2012

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
collapsetrue
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"); 

...