CK_C_INITIALIZE_ARGS
¶CK_C_INITIALIZE_ARGS
¶typedef struct CK_C_INITIALIZE_ARGS {
CK_CREATEMUTEX CreateMutex;
CK_DESTROYMUTEX DestroyMutex;
CK_LOCKMUTEX LockMutex;
CK_UNLOCKMUTEX UnlockMutex;
CK_FLAGS flags;
CK_VOID_PTR pReserved;
} CK_C_INITIALIZE_ARGS;
Поддерживаются следующие флаги (flags
):
CKF_LIBRARY_CANT_CREATE_OS_THREADS
(0x00000001
) – True
, если потоки исполнения приложения, которые
осуществляют вызовы к библиотеке, не могут использовать родные вызовы операционной системы для создания новых
потоков. False
– в обратном случае.
CKF_OS_LOCKING_OK
(0x00000002
) – True
, если библиотека может использовать родную систему потоков
операционной системы для захвата ресурса. False
– в противном случае.
CKF_DEVELOPER_MODE
(0x80000000
) – установка этого флага ускоряет выполнение функций: C_Login()
и
C_Sign()
/C_SignUpdate()
. Ускорение обеспечивается засчет отключения проверки целостности и корректности
функционирования. Рекомендуется использовать только для целей разработки и тестирования.
Предупреждение
Данный флаг поддерживается только апплетом Криптотокен.
CK_VERSION
¶CK_INFO
¶CK_INFO
¶typedef struct CK_INFO {
CK_VERSION cryptokiVersion;
CK_UTF8CHAR manufacturerID[32];
CK_FLAGS flags;
CK_UTF8CHAR libraryDescription[32];
CK_VERSION libraryVersion;
} CK_INFO;
cryptokiVersion
¶Версия стандарта PKCS #11, с которым совместима библиотека Cryptoki.
В текущей версии библиотеки это поле принимает значение 2.30
.
manufacturerID
(32)¶Идентификатор, определяющий разработчика библиотеки Cryptoki.
Всегда принимает значение: Aladdin R.D.
.
libraryDescription
(32)¶Описание библиотеки. Всегда принимает значение: JaCarta PKCS#11 module
.
libraryVersion
¶Версия библиотеки jcPKCS11-2.
CK_ATTRIBUTE
¶CK_ATTRIBUTE_PTR
¶Указатель на структуру CK_ATTRIBUTE
.
typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR;
CK_ATTRIBUTE
¶typedef struct CK_ATTRIBUTE {
CK_ATTRIBUTE_TYPE type;
CK_VOID_PTR pValue;
CK_ULONG ulValueLen;
} CK_ATTRIBUTE;
type
¶Тип атрибута.
pValue
¶Значение атрибута.
CK_DATE
¶CK_MECHANISM
¶CK_MECHANISM_PTR
¶Указатель на структуру CK_MECHANISM
.
typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR;
CK_MECHANISM
¶typedef struct CK_MECHANISM {
CK_MECHANISM_TYPE mechanism;
CK_VOID_PTR pParameter;
CK_ULONG ulParameterLen;
} CK_MECHANISM;
mechanism
¶Тип механизма.
pParameter
¶Указатель на параметр, если требуется.
CK_MECHANISM_INFO
¶CK_MECHANISM_INFO_PTR
¶Указатель на структуру CK_MECHANISM_INFO
.
typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR;
CK_MECHANISM_INFO
¶typedef struct CK_MECHANISM_INFO {
CK_ULONG ulMinKeySize;
CK_ULONG ulMaxKeySize;
CK_FLAGS flags;
} CK_MECHANISM_INFO;
Поле flags
может содержать следующие флаги:
CKF_HW
(0x00000001
) – аппаратно реализуемый механизм.CKF_ENCRYPT
(0x00000100
) – механизм зашифрования данных.CKF_DECRYPT
(0x00000200
) – механизм расшифрования данных.CKF_DIGEST
(0x00000400
) – механизм хэширования.CKF_SIGN
(0x00000800
) – механизм формирования ЭП и имитовставки.CKF_SIGN_RECOVER
(0x00001000
) – для поддерживаемых библиотекой Cryptoki механизмов этот флаг не
установлен.CKF_VERIFY
(0x00002000
) – механизм проверки ЭП и имитовставки.CKF_VERIFY_RECOVER
(0x00004000
) – для поддерживаемых библиотекой Cryptoki механизмов этот флаг не
установлен.CKF_GENERATE
(0x00008000
) – механизм выработки симметричных ключей.CKF_GENERATE_KEY_PAIR
(0x00010000
) – механизм генерации ключевой пары.CKF_WRAP
(0x00020000
) – механизм экспорта симметричных ключей.CKF_UNWRAP
(0x00040000
) – механизм импорта зашифрованных криптографических ключей.CKF_DERIVE
(0x00080000
) – механизм выработки общего ключа.CKF_EXTENSION
(0x80000000
) – для поддерживаемых библиотекой Cryptoki механизмов этот флаг не установлен.CK_SLOT_INFO
¶CK_SLOT_INFO_PTR
¶Указатель на структуру CK_SLOT_INFO
.
typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;
CK_SLOT_INFO
¶typedef struct CK_SLOT_INFO {
CK_UTF8CHAR slotDescription[64];
CK_UTF8CHAR manufacturerID[32];
CK_FLAGS flags;
CK_VERSION hardwareVersion;
CK_VERSION firmwareVersion;
} CK_SLOT_INFO;
slotDescription
(64)¶Строка символов с описанием слота.
manufacturerID
(32)¶Идентификатор, определяющий разработчика библиотеки Cryptoki.
Поле идентификатора принимает значение Aladdin R.D.
.
hardwareVersion
¶Номер аппаратной версии слота.
firmwareVersion
¶Номер версии прошивки слота.
Поле flags
может содержать следующие флаги:
CKF_TOKEN_PRESENT
(0x00000001
) – True
, если в слоте наличествует токен.CKF_REMOVABLE_DEVICE
(0x00000002
) – True
, если ридер поддерживает извлекаемые устройства.CKF_HW_SLOT
(0x00000004
) – True
, если слот аппаратный.CK_TOKEN_INFO
¶CK_TOKEN_INFO_PTR
¶Указатель на структуру CK_TOKEN_INFO
.
typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
CK_TOKEN_INFO
¶typedef struct CK_TOKEN_INFO {
CK_UTF8CHAR label[32];
CK_UTF8CHAR manufacturerID[32];
CK_UTF8CHAR model[16];
CK_CHAR serialNumber[16];
CK_FLAGS flags;
CK_ULONG ulMaxSessionCount;
CK_ULONG ulSessionCount;
CK_ULONG ulMaxRwSessionCount;
CK_ULONG ulRwSessionCount;
CK_ULONG ulMaxPinLen;
CK_ULONG ulMinPinLen;
CK_ULONG ulTotalPublicMemory;
CK_ULONG ulFreePublicMemory;
CK_ULONG ulTotalPrivateMemory;
CK_ULONG ulFreePrivateMemory;
CK_VERSION hardwareVersion;
CK_VERSION firmwareVersion;
CK_CHAR utcTime[16];
} CK_TOKEN_INFO;
label
(32)¶Назначаемая приложением метка токена. Присваивается в момент инициализации.
manufacturerID
(32)¶Идентификатор, определяющий разработчика библиотеки Cryptoki. Поле идентификатора принимает значение
Aladdin R.D.
.
model
(16)¶Модель устройства. Для поддерживаемых Cryptoki-библиотекой апплетов/устройств это поле принимает следующие значения:
JaCarta GOST 2.0
– для апплета Криптотокен 2 ЭП (макрос JC_MODEL_CRYPTOTOKEN_2
);eToken GOST
– для апплета Криптотокен (макрос JC_MODEL_CRYPTOTOKEN_1
);JaCarta Laser
– для апплета Laser (макрос JC_MODEL_LASER
);JaCarta DS
– для апплета Datastore (макрос JC_MODEL_DATASTORE
);PRO
– для апплета PRO (макрос JC_MODEL_PRO
).ulMaxSessionCount
¶Максимальное количество сеансов работы одного приложения с устройством. Для поддерживаемых
Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение
CK_EFFECTIVELY_INFINITE
.
ulSessionCount
¶Количество открытых сеансов работы данного приложения с устройством. Для поддерживаемых
Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение
CK_UNAVAILABLE_INFORMATION
.
ulMaxRwSessionCount
¶Максимальное количество сеансов одного приложения для чтения и записи в устройство. Для
поддерживаемых Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение
CK_EFFECTIVELY_INFINITE
.
ulRwSessionCount
¶Количество открытых в данный момент данным приложением сеансов для чтения и записи. Для
поддерживаемых Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение
CK_UNAVAILABLE_INFORMATION
.
ulMaxPinLen
¶Максимальная длина PIN-кода в байтах. Для поддерживаемых Cryptoki-библиотекой устройств это поле может принимать значение 16
или 32
в зависимости от апплета.
ulMinPinLen
¶Минимальная длина PIN-кода в байтах. Для поддерживаемых Cryptoki-библиотеки устройств это поле может принимать значение 4
или 6
в зависимости от апплета.
ulTotalPublicMemory
¶Согласно стандарту PKCS #11 в это поле должен записываться общий размер памяти, который
может быть выделен для хранения публичных объектов. В поддерживаемых Cryptoki-библиотекой
устройствах для хранения публичных и приватных объектов используется одна и та же память. Текущая версия модуля
присваивает этому полю предусмотренное стандартом PKCS #11 значение CK_UNAVAILABLE_INFORMATION
.
ulFreePublicMemory
¶Согласно стандарту PKCS #11 в это поле должен записываться размер памяти, доступной для
хранения публичных объектов. В поддерживаемых Cryptoki-библиотекой устройствах для хранения публичных и приватных
объектов используется одна и та же память. Поэтому в данное поле записывается количество байтов памяти, доступной
как для приватных, так и для публичных объектов. При этом, если размер доступной памяти больше 32 КБ, поле
принимает значение 32767
.
ulTotalPrivateMemory
¶Согласно стандарту PKCS #11, в это поле должен записываться общий размер памяти,
которая может быть выделена для хранения приватных объектов. В поддерживаемых
Cryptoki-библиотекой устройствах для хранения открытых и приватных объектов используется одна и та же память.
Текущая версия модуля присваивает этому полю предусмотренное стандартом PKCS #11 значение
CK_UNAVAILABLE_INFORMATION
.
ulFreePrivateMemory
¶Согласно стандарту PKCS #11, в это поле должен записываться размер памяти, доступной для
хранения приватных объектов. В поддерживаемых Cryptoki-библиотекой устройствах для хранения публичных и приватных
объектов используется одна и та же память. Поэтому в данное поле записывается количество байтов памяти, доступной
как для приватных, так и для публичных объектов. При этом, если размер доступной памяти больше
32 КБ, поле принимает значение 32767
.
hardwareVersion
¶Номер версии устройства.
firmwareVersion
¶Номер версии прошивки.
utcTime
(16)¶Поддерживаемые Cryptoki-библиотекой устройства не содержат встроенных часов. Поле заполняется нулями.
Поле flags
может содержать следующие флаги:
CKF_RNG
(0x00000001
) – флаг установлен, если в токене присутствует встроенный генератор случайных чисел.
Всегда установлен.CKF_WRITE_PROTECTED
(0x00000002
) – флаг установлен, когда устройство работает в гостевом режиме, и не
установлен, когда устройство работает в режимах, требующих ввода PIN-кода.CKF_LOGIN_REQIURED
(0x00000004
) – флаг установлен, если выполнение некоторых криптографических функций
требует, чтобы пользователь был залогинен. Всегда установлен.CKF_USER_PIN_INITIALIZED
(0x00000008
) – флаг установлен, если инициализирован PIN-код пользователя, и не
установлен в противном случае.CKF_RESTORE_KEY_NOT_NEEDED
(0x00000020
) – установлен, если успешное сохранение состояния криптографических
операций сеанса всегда содержит все ключи, необходимые для
восстановления сессии. Всегда не установлен.CKF_CLOCK_ON_TOKEN
(0x00000040
) – флаг установлен, если в токене присутствуют встроенные аппаратные часы.
Всегда не установлен.CKF_PROTECTED_AUTHENTICATION_PATH
(0x00000100
) – установлен, если токен поддерживает возможность
аутентификации без ввода PIN-кода. Всегда не установлен.CKF_DUAL_CRYPTO_OPERATIONS
(0x00000200
) – флаг установлен, если токен поддерживает выполнение двух
криптографических функций одновременно. Всегда не установлен.CKF_TOKEN_INITIALIZED
(0x00000400
) – установлен, если токен был инициализирован функцией
C_InitToken()
. Всегда установлен.CKF_SECONDARY_AUTHENTICATION
(0x00000800
) – флаг установлен, если токен поддерживает вторичную
аутентификацию для приватных объектов ключей. Всегда не установлен.CKF_USER_PIN_COUNT_LOW
(0x00010000
) – флаг установлен, если со времени последней успешной попытки ввода
PIN-кода пользователя была предпринята, по меньшей мере, одна неудачная попытка ввода этого PIN-кода, и не
установлен в противном случае.CKF_USER_PIN_FINAL_TRY
(0x00020000
) – флаг установлен, если у пользователя осталась последняя попытка
ввода PIN-кода, и не установлен в других случаях.CKF_USER_PIN_LOCKED
(0x00040000
) – флаг установлен, если PIN-код пользователя заблокирован, и не
установлен, если PIN-код пользователя не заблокирован.CKF_USER_PIN_TO_BE_CHANGED
(0x00080000
) – установлен, если PIN-код пользователя установлен по умолчанию
при инициализации или срок его действия истек, т.е. PIN-код необходимо изменить. Всегда не установлен.CKF_SO_PIN_COUNT_LOW
(0x00100000
) – флаг установлен, если со времени последней успешной попытки ввода
PIN-кода администратора была предпринята, по меньшей мере, одна неудачная попытка
ввода этого PIN-кода, и не установлен в противном случае.CKF_SO_PIN_FINAL_TRY
(0x00200000
) – флаг установлен, если у администратора осталась последняя попытка
ввода PIN-кода, и не установлен в других случаях.CKF_SO_PIN_LOCKED
(0x00400000
) – флаг установлен, если PIN-код администратора заблокирован, и не
установлен в противном случае.CKF_SO_PIN_TO_BE_CHANGED
(0x00800000
) – установлен, если PIN-код администратора установлен по умолчанию
при инициализации или срок его действия истек, т.е. PIN-код необходимо изменить. Всегда не установлен.CKF_ERROR_STATE
(0x01000000
) – установлен, если токен не прошел самопроверку FIPS 140-2 и находится в
состоянии ошибки. Всегда не установлен.CK_SESSION_INFO
¶CK_SESSION_INFO_PTR
¶Указатель на структуру CK_SESSION_INFO
.
typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
CK_SESSION_INFO
¶typedef struct CK_SESSION_INFO {
CK_SLOT_ID slotID;
CK_STATE state;
CK_FLAGS flags;
CK_ULONG ulDeviceError;
} CK_SESSION_INFO;
slotID
¶Идентификатор слота.
Поле flags
может содержать следующие флаги:
CKF_RW_SESSION
(0x00000002
) – установлен, если сеанс поддерживает и чтение, и запись. Не установлен, если
сеанс поддерживает только чтение.CKF_SERIAL_SESSION
(0x00000004
) – этот флаг добавлен для обратной совместимости и должен быть всегда
установлен.JC_ISD_DATA
¶JC_ISD_DATA_PTR
¶Указатель на структуру JC_ISD_DATA
.
typedef JC_ISD_DATA CK_PTR JC_ISD_DATA_PTR;
JC_ISD_DATA
¶typedef struct JC_ISD_DATA {
CK_UTF8CHAR model[32];
CK_BYTE manufacturingDate[8];
} JC_ISD_DATA;
model
(32)¶Название модели
JC_TOKEN_PROPERTIES
¶JC_TOKEN_PROPERTIES_PTR
¶Указатель на структуру JC_TOKEN_PROPERTIES
.
typedef JC_TOKEN_PROPERTIES CK_PTR JC_TOKEN_PROPERTIES_PTR;
JC_TOKEN_PROPERTIES
¶typedef struct JC_TOKEN_PROPERTIES {
CK_BYTE_PTR pAttr;
CK_ULONG ulAttrSize;
CK_BYTE_PTR pJaCartaTag;
CK_ULONG ulJaCartaTagSize;
CK_BYTE_PTR pSerialNumber;
CK_ULONG ulSerialNumberSize;
CK_ULONG ulManufactureDate;
CK_ULONG ulAppletCount;
JC_APPLET_TYPE_PTR pApplets;
} JC_TOKEN_PROPERTIES;
pAttr
¶Массив атрибутов.
pJaCartaTag
¶Тег считывателя.
pSerialNumber
¶Серийный номер считывателя.
pApplets
¶Типы апплетов. Возможные значения:
JC_APPLET_TYPE_CRYPTO_TOKEN
(1) – апплет Криптотокен;JC_APPLET_TYPE_CRYPTO_TOKEN_2
(2) – апплет Криптотокен 2 ЭП;JC_APPLET_TYPE_LASER
(3) – апплет Laser;JC_APPLET_TYPE_DATA_STORE
(4) – апплет Datastore;JC_APPLET_TYPE_FKH
(5) – FKH;JC_APPLET_TYPE_PRO_JAVA
(6) – апплет PRO Java;JC_APPLET_TYPE_PRO
(7) – апплет PRO;JC_APPLET_TYPE_VASCO_CARDLESS
(8) – Антифрод-терминал в бескарточном режиме;JC_APPLET_TYPE_WEBPASS
(9) – апплет Webpass.JC_VERSION_INFO
¶JC_VERSION_INFO_PTR
¶Указатель на структуру JC_VERSION_INFO
.
typedef JC_VERSION_INFO CK_PTR JC_VERSION_INFO_PTR;
JC_VERSION_INFO
¶Версия библиотеки.
typedef struct JC_VERSION_INFO {
CK_ULONG ulMajor;
CK_ULONG ulMinor;
CK_ULONG ulRelease;
CK_ULONG ulBuild;
} JC_VERSION_INFO;
SWYX_PROPERTIES_RESPONSE
¶SWYX_PROPERTIES_RESPONSE_PTR
¶Указатель на структуру SWYX_PROPERTIES_RESPONSE
.
typedef SWYX_PROPERTIES_RESPONSE CK_PTR SWYX_PROPERTIES_RESPONSE_PTR;
SWYX_PROPERTIES_RESPONSE
¶Свойства SWYX-считывателя.
typedef struct SWYX_PROPERTIES_RESPONSE {
CK_BYTE DisplayType;
CK_ULONG ulLcdMaxCharacters;
CK_ULONG ulLcdMaxLines;
CK_ULONG ulGraphicMaxWidth;
CK_ULONG ulGraphicMaxHeight;
CK_BYTE GraphicColorDepth;
CK_ULONG ulMaxVirtualSize;
} SWYX_PROPERTIES_RESPONSE;
DisplayType
¶Тип экрана Антифрод-терминала: 0 - поддерживает только текст, 1 - поддерживает графику.
CK_GOSTR3410_DERIVE_PARAMS
¶Параметры для выработки ключа согласования.
CK_GOSTR3410_DERIVE_PARAMS
¶typedef struct CK_GOSTR3410_DERIVE_PARAMS {
CK_EC_KDF_TYPE kdf;
CK_BYTE_PTR pPublicData;
CK_ULONG ulPublicDataLen;
CK_BYTE_PTR pUKM;
CK_ULONG ulUKMLen;
} CK_GOSTR3410_DERIVE_PARAMS;
kdf
¶Идентификатор используемой диверсификации ключа. Может принимать следующие значения:
CKD_NULL
– общий ключ выводится по алгоритму, описанному в подразделе 5.2 RFC 4357.CKD_CPDIVERSIFY_KDF
– при выводе общего ключа сначала применяется алгоритм, описанный в подразделе 5.2 RFC 4357, а затем результат выполнения этого алгоритма подвергается диверсификации по алгоритму, описанному в подразделе 6.5 того же документа.pPublicData
¶указатель на буфер, содержащий ключ проверки ЭП получателя. Ключ представлен в виде последовательной записи координат точки X и Y. Каждая координата представляет собой вектор длиной 32 байта в порядке от младшего к старшему (little-endian).
ulPublicDataLen
¶Длина буфера, содержащего открытый ключ получателя. Указывается в байтах, должна равняться 64
.
pUKM
¶Указатель на буфер, содержащий параметр UKM
(RFC 4357) в представлении от младшего к старшему
(little-endian).
CK_GOSTR3410_KEY_WRAP_PARAMS
¶Параметры экспорта ключа.
CK_GOSTR3410_KEY_WRAP_PARAMS
¶typedef struct CK_GOSTR3410_KEY_WRAP_PARAMS {
CK_BYTE_PTR pWrapOID;
CK_ULONG ulWrapOIDLen;
CK_BYTE_PTR pUKM;
CK_ULONG ulUKMLen;
CK_OBJECT_HANDLE hKey;
} CK_GOSTR3410_KEY_WRAP_PARAMS;
pWrapOID
¶Объектный идентификатор (OID) для обозначения параметров создания общего ключа.
pUKM
¶Указатель на буфер, содержащий параметр UKM
(RFC 4357) в представлении от младшего к старшему
(little-endian).
hKey
¶Указатель на исходный ключ.