Структуры

CK_C_INITIALIZE_ARGS

Используется функцией C_Initialize().

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_INFO

Используется функцией C_GetInfo().

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;
CK_VERSION cryptokiVersion

Версия стандарта PKCS #11, с которым совместима библиотека Cryptoki. В текущей версии библиотеки это поле принимает значение v2.30.

CK_UTF8CHAR manufacturerID(32)

Идентификатор, определяющий разработчика библиотеки Cryptoki. Поле идентификатора принимает значение Aladdin R.D..

CK_FLAGS flags

Зарезервированное поле флагов. Должно принимать значение 0.

CK_UTF8CHAR libraryDescription(32)

Описание библиотеки Cryptoki: JaCarta PKCS #11 Module.

CK_VERSION libraryVersion

Версия библиотеки Cryptoki: v1.0.

CK_FUNCTION_LIST

Используется функцией C_GetFunctionList().

CK_FUNCTION_LIST
typedef struct CK_FUNCTION_LIST {
  CK_VERSION version;
  CK_C_Initialize C_Initialize;
  CK_C_Finalize C_Finalize;
  CK_C_GetInfo C_GetInfo;
  CK_C_GetFunctionList C_GetFunctionList;
  CK_C_GetSlotList C_GetSlotList;
  CK_C_GetSlotInfo C_GetSlotInfo;
  CK_C_GetTokenInfo C_GetTokenInfo;
  CK_C_GetMechanismList C_GetMechanismList;
  CK_C_GetMechanismInfo C_GetMechanismInfo;
  CK_C_InitToken C_InitToken;
  CK_C_InitPIN C_InitPIN;
  CK_C_SetPIN C_SetPIN;
  CK_C_OpenSession C_OpenSession;
  CK_C_CloseSession C_CloseSession;
  CK_C_CloseAllSessions C_CloseAllSessions;
  CK_C_GetSessionInfo C_GetSessionInfo;
  CK_C_GetOperationState C_GetOperationState;
  CK_C_SetOperationState C_SetOperationState;
  CK_C_Login C_Login;
  CK_C_Logout C_Logout;
  CK_C_CreateObject C_CreateObject;
  CK_C_CopyObject C_CopyObject;
  CK_C_DestroyObject C_DestroyObject;
  CK_C_GetObjectSize C_GetObjectSize;
  CK_C_GetAttributeValue C_GetAttributeValue;
  CK_C_SetAttributeValue C_SetAttributeValue;
  CK_C_FindObjectsInit C_FindObjectsInit;
  CK_C_FindObjects C_FindObjects;
  CK_C_FindObjectsFinal C_FindObjectsFinal;
  CK_C_EncryptInit C_EncryptInit;
  CK_C_Encrypt C_Encrypt;
  CK_C_EncryptUpdate C_EncryptUpdate;
  CK_C_EncryptFinal C_EncryptFinal;
  CK_C_DecryptInit C_DecryptInit;
  CK_C_Decrypt C_Decrypt;
  CK_C_DecryptUpdate C_DecryptUpdate;
  CK_C_DecryptFinal C_DecryptFinal;
  CK_C_DigestInit C_DigestInit;
  CK_C_Digest C_Digest;
  CK_C_DigestUpdate C_DigestUpdate;
  CK_C_DigestKey C_DigestKey;
  CK_C_DigestFinal C_DigestFinal;
  CK_C_SignInit C_SignInit;
  CK_C_Sign C_Sign;
  CK_C_SignUpdate C_SignUpdate;
  CK_C_SignFinal C_SignFinal;
  CK_C_SignRecoverInit C_SignRecoverInit;
  CK_C_SignRecover C_SignRecover;
  CK_C_VerifyInit C_VerifyInit;
  CK_C_Verify C_Verify;
  CK_C_VerifyUpdate C_VerifyUpdate;
  CK_C_VerifyFinal C_VerifyFinal;
  CK_C_VerifyRecoverInit C_VerifyRecoverInit;
  CK_C_VerifyRecover C_VerifyRecover;
  CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
  CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
  CK_C_SignEncryptUpdate C_SignEncryptUpdate;
  CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
  CK_C_GenerateKey C_GenerateKey;
  CK_C_GenerateKeyPair C_GenerateKeyPair;
  CK_C_WrapKey C_WrapKey;
  CK_C_UnwrapKey C_UnwrapKey;
  CK_C_DeriveKey C_DeriveKey;
  CK_C_SeedRandom C_SeedRandom;
  CK_C_GenerateRandom C_GenerateRandom;
  CK_C_GetFunctionStatus C_GetFunctionStatus;
  CK_C_CancelFunction C_CancelFunction;
  CK_C_WaitForSlotEvent C_WaitForSlotEvent;
} CK_FUNCTION_LIST;

Структура содержит указатели на все методы Cryptoki API.

CK_ATTRIBUTE

Используется функциями:

CK_ATTRIBUTE
typedef struct CK_ATTRIBUTE {
  CK_ATTRIBUTE_TYPE type;
  CK_VOID_PTR pValue;
  CK_ULONG ulValueLen;
} CK_ATTRIBUTE;
CK_ATTRIBUTE_TYPE type

Тип атрибута.

CK_VOID_PTR pValue

Значение атрибута.

CK_ULONG ulValueLen

Размер значения.

CK_MECHANISM

Используется функциями:

CK_MECHANISM
typedef struct CK_MECHANISM {
  CK_MECHANISM_TYPE mechanism;
  CK_VOID_PTR pParameter;
  CK_ULONG ulParameterLen;
} CK_MECHANISM;
CK_MECHANISM_TYPE mechanism

Тип механизма.

CK_VOID_PTR pParameter

Указатель на параметр, если требуется.

CK_ULONG ulParameterLen

Размер параметра в байтах.

CK_MECHANISM_INFO

Используется функцией C_GetMechanismInfo().

CK_MECHANISM_INFO
typedef struct CK_MECHANISM_INFO {
   CK_ULONG ulMinKeySize;
   CK_ULONG ulMaxKeySize;
   CK_FLAGS flags;
} CK_MECHANISM_INFO;
CK_ULONG ulMinKeySize

Минимальный размер ключа для механизма.

CK_ULONG ulMaxKeySize

Максимальный размер ключа для механизма.

CK_FLAGS flags

Флаги, определяющие возможности механизма.

Поле 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

Используется функцией C_GetSlotInfo().

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;
CK_UTF8CHAR slotDescription(64)

Строка символов с описанием слота.

CK_UTF8CHAR manufacturerID(32)

Идентификатор, определяющий разработчика библиотеки Cryptoki. Поле идентификатора принимает значение Aladdin R.D..

CK_FLAGS flags

Битовые флаги, определяющие возможности и состояние устройства.

CK_VERSION hardwareVersion

Номер аппаратной версии слота.

CK_VERSION firmwareVersion

Номер версии прошивки слота.

Поле flags может содержать следующие флаги:

  • CKF_TOKEN_PRESENT (0x00000001) – True, если в слоте наличествует токен.
  • CKF_REMOVABLE_DEVICE (0x00000002) – True, если ридер поддерживает извлекаемые устройства.
  • CKF_HW_SLOT (0x00000004) – True, если слот аппаратный.

CK_TOKEN_INFO

Используется функцией C_GetTokenInfo().

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;
CK_UTF8CHAR label(32)

Назначаемая приложением метка токена. Присваивается в момент инициализации.

CK_UTF8CHAR manufacturerID(32)

Идентификатор, определяющий разработчика библиотеки Cryptoki. Поле идентификатора принимает значение Aladdin R.D..

CK_UTF8CHAR model(16)

Модель устройства. Для поддерживаемых Cryptoki-библиотекой апплетов/устройств это поле принимает следующие значения:

  • eToken GOST для апплета Криптотокен,
  • JaCarta Laser для апплета Laser,
  • JaCarta DS для апплета Datastore.
  • JaCarta для апплета Laser в случае, если он инициализирован с использованием Единого клиента JaCarta.
  • CNS для апплета Laser в случае, если он инициализирован с использованием стороннего ПО.
CK_CHAR serialNumber(16)

Серийный номер.

CK_FLAGS flags

Битовые флаги, определяющие возможности и состояние устройства.

CK_ULONG ulMaxSessionCount

Максимальное количество сеансов работы одного приложения с устройством. Для поддерживаемых Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение CK_EFFECTIVELY_INFINITE.

CK_ULONG ulSessionCount

Количество открытых сеансов работы данного приложения с устройством. Для поддерживаемых Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение CK_UNAVAILABLE_INFORMATION.

CK_ULONG ulMaxRwSessionCount

Максимальное количество сеансов одного приложения для чтения и записи в устройство. Для поддерживаемых Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение CK_EFFECTIVELY_INFINITE.

CK_ULONG ulRwSessionCount

Количество открытых в данный момент данным приложением сеансов для чтения и записи. Для поддерживаемых Cryptoki-библиотекой устройств это поле принимает предусмотренное стандартом PKCS #11 значение CK_UNAVAILABLE_INFORMATION.

CK_ULONG ulMaxPinLen

Максимальная длина PIN-кода в байтах. Для поддерживаемых Cryptoki-библиотекой устройств это поле может принимать значение 16 или 32 в зависимости от апплета.

CK_ULONG ulMinPinLen

Минимальная длина PIN-кода в байтах. Для поддерживаемых Cryptoki-библиотеки устройств это поле может принимать значение 4 или 6 в зависимости от апплета.

CK_ULONG ulTotalPublicMemory

Согласно стандарту PKCS #11 в это поле должен записываться общий размер памяти, который может быть выделен для хранения публичных объектов. В поддерживаемых Cryptoki-библиотекой устройствах для хранения публичных и приватных объектов используется одна и та же память. Текущая версия модуля присваивает этому полю предусмотренное стандартом PKCS #11 значение CK_UNAVAILABLE_INFORMATION.

CK_ULONG ulFreePublicMemory

Согласно стандарту PKCS #11 в это поле должен записываться размер памяти, доступной для хранения публичных объектов. В поддерживаемых Cryptoki-библиотекой устройствах для хранения публичных и приватных объектов используется одна и та же память. Поэтому в данное поле записывается количество байтов памяти, доступной как для приватных, так и для публичных объектов. При этом, если размер доступной памяти больше 32 КБ, поле принимает значение 32767.

CK_ULONG ulTotalPrivateMemory

Согласно стандарту PKCS #11, в это поле должен записываться общий размер памяти, которая может быть выделена для хранения приватных объектов. В поддерживаемых Cryptoki-библиотекой устройствах для хранения открытых и приватных объектов используется одна и та же память. Текущая версия модуля присваивает этому полю предусмотренное стандартом PKCS #11 значение CK_UNAVAILABLE_INFORMATION.

CK_ULONG ulFreePrivateMemory

Согласно стандарту PKCS #11, в это поле должен записываться размер памяти, доступной для хранения приватных объектов. В поддерживаемых Cryptoki-библиотекой устройствах для хранения публичных и приватных объектов используется одна и та же память. Поэтому в данное поле записывается количество байтов памяти, доступной как для приватных, так и для публичных объектов. При этом, если размер доступной памяти больше 32 КБ, поле принимает значение 32767.

CK_VERSION hardwareVersion

Номер версии устройства.

CK_VERSION firmwareVersion

Номер версии прошивки.

CK_CHAR utcTime(16)

Поддерживаемые Cryptoki-библиотекой устройства не содержат встроенных часов. Поле заполняется нулями.

Поле flags может содержать следующие флаги:

  • CKF_RNG (0x00000001) – флаг установлен, если в токене присутствует встроенный генератор случайных чисел. Всегда установлен.
  • CKF_WRITE_PROTECTED (0x00000001) – флаг установлен, когда устройство работает в гостевом режиме, и не установлен, когда устройство работает в режимах, требующих ввода 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

Используется функцией C_GetSessionInfo().

CK_SESSION_INFO
typedef struct CK_SESSION_INFO {
  CK_SLOT_ID slotID;
  CK_STATE state;
  CK_FLAGS flags;
  CK_ULONG ulDeviceError;
} CK_SESSION_INFO;
CK_SLOT_ID slotID

Идентификатор слота.

CK_STATE state

Состояние сеанса.

CK_FLAGS flags

Флаги, определяющие тип сессии.

CK_ULONG ulDeviceError

Код ошибки, определяемый криптографическим устройством. Не поддерживается.

Поле flags может содержать следующие флаги:

  • CKF_RW_SESSION (0x00000002) – установлен, если сеанс поддерживает и чтение, и запись. Не установлен, если сеанс поддерживает только чтение.
  • CKF_SERIAL_SESSION (0x00000004) – этот флаг добавлен для обратной совместимости и должен быть всегда установлен.

CK_GOSTR3410_DERIVE_PARAMS

Используется функцией C_GenerateKey().

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

Идентификатор используемой диверсификации ключа.

pPublicData

указатель на буфер, содержащий ключ проверки ЭП получателя. Ключ представлен в виде последовательной записи координат точки X и Y. Каждая координата представляет собой вектор длиной 32 байта в порядке от младшего к старшему (little-endian).

ulPublicDataLen

Длина буфера, содержащего открытый ключ получателя. Указывается в байтах, должна равняться 64.

pUKM

Указатель на буфер, содержащий параметр UKM (RFC 4357) в представлении от младшего к старшему (little-endian).

ulUKMLen

Длина буфера, содержащего UKM. Указывается в байтах, должна равняться 8.

Поле kdf может принимать следующие параметры:

  • CKD_NULL – общий ключ выводится по алгоритму, описанному в подразделе 5.2 RFC 4357.
  • CKD_CPDIVERSIFY_KDF – при выводе общего ключа сначала применяется алгоритм, описанный в подразделе 5.2 RFC 4357, а затем результат выполнения этого алгоритма подвергается диверсификации по алгоритму, описанному в подразделе 6.5 того же документа.

SWYX_PROPERTIES_RESPONSE

Используется функцией C_jcCtrl().

SWYX_PROPERTIES_RESPONSE
typedef struct SWYX_PROPERTIES_RESPONSE {
  CK_BYTE bDisplayType;
  CK_ULONG wLcdMaxCharacters;
  CK_ULONG wLcdMaxLines;
  CK_ULONG wGraphicMaxWidth;
  CK_ULONG wGraphicMaxHeight;
  CK_BYTE bGraphicColorDepth;
  CK_ULONG wMaxVirtualSize;
} SWYX_PROPERTIES_RESPONSE;
CK_BYTE bDisplayType

Тип экрана:

  • 0 – текстовый,
  • 1 – графический.
CK_ULONG wLcdMaxCharacters

Максимальное количество символов в одной строке.

CK_ULONG wLcdMaxLines

Максимальное количество строк.

CK_ULONG wGraphicMaxWidth

Ширина экрана в точках.

CK_ULONG wGraphicMaxHeight

Высота экрана в точках.

CK_BYTE bGraphicColorDepth

Цветность экрана:

  • 1 – черно-белый,
  • 2 – градации серого,
  • 4 – цветной.
CK_ULONG wMaxVirtualSize

Максимальное количество символов, одновременно помещающихся на экране.

SWYX_DISPLAY_COMMAND

Используется функцией C_jcCtrl().

SWYX_DISPLAY_COMMAND
typedef struct SWYX_DISPLAY_COMMAND {
  CK_BYTE bSwyxFunction;
  CK_BYTE bTimeout;
  CK_ULONG wLangId;
  CK_ULONG wLength4;
  CK_BYTE abB64UTF8[];
} SWYX_DISPLAY_COMMAND;
CK_BYTE bSwyxFunction

Байт, принимающий значение 0x02.

CK_BYTE bTimeout

Время ожидания терминалом нажатия пользователем кнопки OK или Отмена, выраженное числом 5-секундных интервалов, в случае бесконечного времени ожидания bTimeout=0x00.

CK_ULONG wLangId

Двухбайтовый идентификатор языка (например, для русского языка wLangId = 0x0419, см. USB Language Identifiers [PDF]) в представлении от младшего к старшему (little endian).

CK_ULONG wLength

Длина массива abB64UTF8[] в байтах, выраженная в представлении от младшего к старшему (little endian).

CK_BYTE abB64UTF8()

Байтовый массив, представляющий собой отображённый на экране Антифрод-терминала текст, переведённый из кодировки UTF-8 в кодировку Base64.

SWYX_DISPLAY_ARGUMENTS

Используется функцией C_jcCtrl().

SWYX_DISPLAY_ARGUMENTS
typedef struct SWYX_DISPLAY_ARGUMENTS {
  CK_BYTE swyxDisplayTimeout;
  CK_UTF8CHAR_PTR text;
  CK_ULONG textLength;
} SWYX_DISPLAY_ARGUMENTS;
CK_BYTE swyxDisplayTimeout

Время ожидания терминалом нажатия пользователем кнопки OK или Отмена, выраженное числом 5 секундных интервалов, в случае бесконечного времени ожидания bTimeout=0x00.

CK_UTF8CHAR_PTR text

Текст для отображения на экране Антифрод-терминала в кодировке UTF-8 длиной от 5 до 400 символов.

CK_ULONG textLength

Длина текста.

Поле text должно быть задано в кодировке UTF-8.

JCCTRL_PersonalizationData

Используется функцией C_jcCtrl().

JCCTRL_PersonalizationData
struct JCCTRL_PersonalizationData
{
  uint8_t IsPersonalized;
  uint8_t UserMaxAttempts;
  uint8_t UserMaxUnblock;
  uint8_t AdminMaxAttempts;
  EUserPINType UserPinType;
  uint8_t UserMinChars;
  uint8_t UserMaxChars;
  uint8_t UserMinAlphaChars;
  uint8_t UserMinLowerChars;
  uint8_t UserMinUpperChars;
  uint8_t UserMinDigits;
  uint8_t UserMinNonAlphaChars;
  uint8_t UserPinHistorySize;
  uint8_t AdminIsChalResp;
  uint8_t AdminMinChars;
  uint8_t AdminMaxChars;
  uint8_t AdminMinAlphaChars;
  uint8_t AdminMinLowerChars;
  uint8_t AdminMinUpperChars;
  uint8_t AdminMinDigits;
  uint8_t AdminMinNonAlphaChars;
  uint32_t UserPINValidForSeconds;
  uint32_t UserPINExpiresAfterDays;
  uint8_t BioImageQuality;
  uint32_t BioPurpose;
  uint8_t BioMaxFingers;
  uint8_t DefaultFinger;
  EBioType BioType;
  uint8_t BioMaxUnblock;
  uint8_t UserMustChangeAfterUnlock;
  uint8_t UserMaxRepeatingPin;
  uint8_t UserMaxSequencePin;
  uint8_t AdminMaxRepeatingPin;
  uint8_t AdminMaxSequencePin;
  uint8_t UserMustChangeAfterFirstUse;
  ESecureMessagingMode SecureMessagingMode;
};
uint8_t IsPersonalized

Определяет статус персонализации апплета: 1 – апплет персонализирован, 0 – не персонализирован.

uint8_t UserMaxAttempts

Максимальное количество попыток ввода неправильного PIN-кода пользователя, до его блокировки (1-15).

uint8_t UserMaxUnblock

Максимальное количество разблокировок PIN-кода пользователя (0-15).

uint8_t AdminMaxAttempts

Максимальное количество попыток ввода неправильного PIN-кода администратора, до его блокировки (1-15).

EUserPINType UserPinType

Тип PIN-кода пользователя (см. EUserPINType).

uint8_t UserMinChars

Минимальное количество символов в PIN-коде пользователя.

uint8_t UserMaxChars

Максимальное количество символов в PIN-коде пользователя.

uint8_t UserMinAlphaChars

Минимальное количество символов латинского алфавита в PIN-коде пользователя.

uint8_t UserMinLowerChars

Минимальное количество символов латинского алфавита в нижнем регистре в PIN-коде пользователя.

uint8_t UserMinUpperChars

Минимальное количество символов латинского алфавита в верхнем регистре в PIN-коде пользователя.

uint8_t UserMinDigits

Минимальное количество цифр в PIN-коде пользователя.

uint8_t UserMinNonAlphaChars

Минимальное количество символов отличных от символов латинского алфавита в PIN-коде пользователя.

uint8_t UserPinHistorySize

Количество уникальных новых PIN-кодов пользователя, которое необходимо установить для возможности повторной установки старого PIN-кода пользователя (0-255).

uint8_t AdminIsChalResp

Использовать ли механизм challenge-response с ключом 3DES, вместо PIN-кода администратора (0-1). Параметры сложности PIN-кода неприменимы при значении этого параметра 1.

uint8_t AdminMinChars

Минимальное количество символов в PIN-коде администратора.

uint8_t AdminMaxChars

Максимальное количество символов в PIN-коде администратора.

uint8_t AdminMinAlphaChars

Минимальное количество символов латинского алфавита в PIN-коде администратора.

uint8_t AdminMinLowerChars

Минимальное количество символов латинского алфавита в нижнем регистре в PIN-коде администратора.

uint8_t AdminMinUpperChars

Минимальное количество символов латинского алфавита в верхнем регистре в PIN-коде администратора.

uint8_t AdminMinDigits

Минимальное количество цифр в PIN-коде администратора.

uint8_t AdminMinNonAlphaChars

Минимальное количество символов отличных от символов латинского алфавита в PIN-коде администратора.

uint32_t UserPINValidForSeconds

Время кеширования PIN-кода пользователя в секундах (0-9999).

uint32_t UserPINExpiresAfterDays

Время действия PIN-кода пользователя в днях (0-9999).

uint8_t BioImageQuality

Минимальное качество изображения отпечатка по умолчанию (0-100).

uint32_t BioPurpose

Значение FAR для биометрии по умолчанию (2861 1:100, 4396 1:1000, 5931 1:10000, 7466 1:100000, 9001 1:1000000).

uint8_t BioMaxFingers

Максимальное количество зарегистрированных отпечатков (1-10).

uint8_t DefaultFinger

Идентификатор пальца по умолчанию (1-10).

EBioType BioType

Тип биометрии.

uint8_t BioMaxUnblock

Максимальное количество разблокировок биометрии (0-15).

uint8_t UserMustChangeAfterUnlock

Требовать ли смены PIN-кода пользователя после его разблокировки (0-1).

uint8_t UserMaxRepeatingPin

Максимальное количество повторений одного символа в PIN-коде пользователя.

uint8_t UserMaxSequencePin

Максимальное количество последовательных повторений одного символа в PIN-коде пользователя.

uint8_t AdminMaxRepeatingPin

Максимальное количество повторений одного символа в PIN-коде администратора.

uint8_t AdminMaxSequencePin

Максимальное количество последовательных повторений одного символа в PIN-коде администратора.

uint8_t UserMustChangeAfterFirstUse

Пользователь должен сменить PIN-код после первого использования (0-1).

ESecureMessagingMode SecureMessagingMode

Режим обмена между токеном и компьютером (см. ESecureMessagingMode).

JC_BIO_SUPPORT_INFO

Используется функцией C_jcCtrl().

JC_BIO_SUPPORT_INFO
struct JC_BIO_SUPPORT_INFO
{
    CK_BBOOL m_BiometryEnabled;
    enum JC_CTRL_AUTHTYPE m_AuthType;
    CK_ULONG m_OptionalDataLength;
    CK_BYTE_PTR m_OptionalData;
};
CK_ULONG m_BiometryEnabled

Определяет, поддерживается ли биометрия.

enum JC_CTRL_AUTHTYPE m_AuthType

Тип аутентификации.

CK_ULONG m_OptionalDataLength

Длина дополнительных данных. Должна быть кратна трем.

CK_BYTE_PTR m_OptionalData

Указатель на дополнительные данные. Данные состоят из 0 и более 3-х байтовых последовательностей:

  1. Идентификатор реализации биометрии (JC_CTRL_BIOMETRY_TYPE),
  2. Используется или нет нативная реализация биометрии (01 если используется),
  3. Используется ли нативная реализация биометрии по умолчанию (01 если используется).

JC_CTRL_AUTHTYPE

Используется функцией C_jcCtrl().

JC_CTRL_AUTHTYPE
enum JC_CTRL_AUTHTYPE
{
    JC_CTRL_AUTHTYPE_PIN,
    JC_CTRL_AUTHTYPE_BIO,
    JC_CTRL_AUTHTYPE_PIN_OR_BIO,
    JC_CTRL_AUTHTYPE_PIN_AND_BIO
};
JC_CTRL_AUTHTYPE_PIN

Аутентификация посредством PIN-кода.

JC_CTRL_AUTHTYPE_BIO

Аутентификация посредством биометрии.

JC_CTRL_AUTHTYPE_PIN_OR_BIO

Аутентификация посредством PIN-кода или биометрии.

JC_CTRL_AUTHTYPE_PIN_AND_BIO

Аутентификация посредством PIN-кода и биометрии.

JC_CTRL_BIOMETRIC_ENROLL_DATA

Используется функцией C_jcCtrl().

JC_CTRL_BIOMETRIC_ENROLL_DATA
struct JC_CTRL_BIOMETRIC_ENROLL_DATA
{
    CK_BYTE m_FingerIndex;
    CK_BYTE * m_PublicData;
    CK_ULONG m_PublicDataLen;
    CK_BYTE * m_PrivateData;
    CK_ULONG m_PrivateDataLen;
    CK_BYTE * m_DeviceName;
    CK_ULONG m_DeviceNameLen;
};
CK_BYTE m_FingerIndex

Идентификатор пальца, где 1 – мизинец левой руки, 10 – мизинец правой руки.

CK_BYTE * m_PublicData

Публичные биометрические данные.

CK_ULONG m_PublicDataLen

Размер публичных биометрических данных.

CK_BYTE * m_PrivateData

Личные биометрические данные.

CK_ULONG m_PrivateDataLen

Размер личных биометрических данных.

CK_BYTE * m_DeviceName

Название устройства.

CK_ULONG m_DeviceNameLen

Размер названия устройства.

EUserPINType

Используется структурой JCCTRL_PersonalizationData.

EUserPINType
typedef enum
{
      UserPINTypeUndefined = 0x00,
      UserPINTypePIN = 0x01,
      UserPINTypeBio = 0x03,
      UserPINTypePINorBIO = 0x04,
      UserPINTypePINandBIO = 0x05
} EUserPINType;
UserPINTypeUndefined

Тип авторизации пользователя не определен.

UserPINTypePIN

Тип авторизации пользователя – PIN-код.

UserPINTypeBio

Тип авторизации пользователя – биометрия.

UserPINTypePINorBIO

Тип авторизации пользователя – PIN-код или биометрия.

UserPINTypePINandBIO

Тип авторизации пользователя – PIN-код и биометрия.

ESecureMessagingMode

Используется структурой JCCTRL_PersonalizationData.

ESecureMessagingMode
typedef enum
{
      SecureMessagingModeOFF = 0x00,
      SecureMessagingModeRSA = 0x01,
      SecureMessagingModeECC = 0x02
} ESecureMessagingMode;
SecureMessagingModeOFF

Зашифрование сообщений не происходит.

SecureMessagingModeRSA

Зашифрование сообщений происходит с использованием алгоритма RSA.

SecureMessagingModeECC

Зашифрование сообщений происходит с использованием алгоритма ECC.

INIT_PIN_ARGUMENTS

Используется функцией C_jcCtrl().

INIT_PIN_ARGUMENTS
typedef struct INIT_PIN_ARGUMENTS {
  CK_ULONG wLangId;
  CK_BBOOL requireConfirmation;
} INIT_PIN_ARGUMENTS;
CK_ULONG wLangId

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BBOOL requireConfirmation

Требовать ли повторного ввода PIN-кода для подтверждения.

AFT_GET_READER_VERSION_RESPONCE

Используется функцией JC_Antifraud().

AFT_GET_READER_VERSION_RESPONCE
typedef struct AFT_GET_READER_VERSION_RESPONCE {
  CK_CHAR m_OSVersion[4];
  CK_CHAR m_ApplicationVersion[4];
} AFT_GET_READER_VERSION_RESPONCE;
CK_CHAR m_OSVersion[4]

Версия ОС Антифрод-терминала.

CK_CHAR m_ApplicationVersion[4]

Версия приложения, установленного на терминале.

AFT_PIN_VERIFY_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_PIN_VERIFY_ARGUMENTS
typedef struct AFT_PIN_VERIFY_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
} AFT_PIN_VERIFY_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский. Язык, используемый Антифрод-терминалом для отображения приглашений пользователю.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

AFT_PIN_VERIFY_RESPONCE

Используется функцией JC_Antifraud().

AFT_PIN_VERIFY_RESPONCE
typedef struct AFT_PIN_VERIFY_RESPONCE {
  CK_BYTE m_PIN[32];
} AFT_PIN_VERIFY_RESPONCE;
CK_BYTE m_PIN[32]

Запрошенный PIN-код.

AFT_SWYX_START_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_SWYX_START_ARGUMENTS
typedef struct AFT_SWYX_START_ARGUMENTS {
  CK_BYTE m_bReference[8];
} AFT_SWYX_START_ARGUMENTS;
CK_BYTE m_bReference[8]

Идентификатор транзакции. В журнале операций Антифрод-терминала представлен в виде: <Reference>0123456789ABCDEF</Reference>. Записывается в журнал по окончании работы в SWYX-режиме для предотвращения атаки на повтор транзакции.

AFT_SWYX_DISPLAY_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_SWYX_DISPLAY_ARGUMENTS
  typedef struct AFT_SWYX_DISPLAY_ARGUMENTS {
    CK_BYTE m_swyxDisplayTimeout;
    CK_ULONG m_AFTLanguage;
    CK_ULONG m_textLength;
    CK_BYTE m_DisplayIndex;
    CK_UTF8CHAR m_text[];
} AFT_SWYX_DISPLAY_ARGUMENTS;
CK_BYTE m_swyxDisplayTimeout

Тайм-аут подтверждения подписи пользователем на Антифрод-терминале. Измеряется в 5-секундных интервалах, 0 - бесконечный тайм-аут.

CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский. Язык, используемый Антифрод-терминалом для отображения приглашений пользователю.

CK_ULONG m_textLength

Длина текста, выводимого на экран Антифрод-терминала.

CK_BYTE m_DisplayIndex

Условный номер сообщения, отображаемого внизу экрана при запросе подписания:

  • 0 - “Sign=OK” (“Подписать=OK”, в зависимости от языка).
  • 1 - “Confirm=OK” (“Подтвердить=OK”, в зависимости от языка).

Необязательный параметр. По умолчанию значение 0.

CK_UTF8CHAR m_text[]

Текст для отображения на экране Антифрод-терминала в кодировке UTF8 длиной от 5 до 400 символов.

AFT_SWYX_PROPERTIES

Используется функцией JC_Antifraud().

AFT_SWYX_PROPERTIES
typedef struct AFT_SWYX_PROPERTIES {
  CK_BYTE m_DisplayType;
  CK_ULONG m_LcdMaxCharacters;
  CK_ULONG m_LcdMaxLines;
  CK_ULONG m_GraphicMaxWidth;
  CK_ULONG m_GraphicMaxHeight;
  CK_BYTE m_GraphicColorDepth;
  CK_ULONG m_MaxVirtualSize;
} AFT_SWYX_PROPERTIES;
CK_BYTE m_DisplayType

Тип экрана Антифрод-терминала: 0 - поддерживает только текст, 1 - поддерживает графику.

CK_ULONG m_LcdMaxCharacters

Максимальное количество символов в строке.

CK_ULONG m_LcdMaxLines

Максимальное количество срок, выводимых на экран.

CK_ULONG m_GraphicMaxWidth

Ширина экрана в пикселях.

CK_ULONG m_GraphicMaxHeight

Высота экрана в пикселях.

CK_BYTE m_GraphicColorDepth

Цветовой режим экрана: 1 - монохромный, 2 - градации серого (4 бита), 4 - цветной (4 бита).

CK_ULONG m_MaxVirtualSize

Максимальный размер буфера, который можно отобразить.

AFT_PIN_MODIFY_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_PIN_MODIFY_ARGUMENTS
typedef struct AFT_PIN_MODIFY_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
  CK_BYTE  m_Confirmation;
  CK_BYTE  m_Message1Idx;
  CK_BYTE  m_Message2Idx;
} AFT_PIN_MODIFY_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

CK_BYTE m_Confirmation

0x01 - запросить подтверждение нового PIN-кода, 0x00 - не запрашивать.

CK_BYTE m_Message1Idx

Отображаемое на экране Антифрод-терминала сообщение при запросе на ввод пользователем PIN-кода.

CK_BYTE m_Message2Idx

Отображаемое на экране Антифрод-терминала сообщение при запросе на ввод пользователем PIN-кода.

Примечание

Подробнее об отображении на экране сообщений см. m_MessageIdx.

AFT_ENTER_ADMIN_PIN_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_ENTER_ADMIN_PIN_ARGUMENTS
typedef struct AFT_ENTER_ADMIN_PIN_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
  CK_BYTE  m_Confirmation;
  CK_BYTE  m_Message1Idx;
  CK_BYTE  m_Message2Idx;
} AFT_ENTER_ADMIN_PIN_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

CK_BYTE m_Confirmation

0x01 - запросить подтверждение нового PIN-кода, 0x00 - не запрашивать.

CK_BYTE m_Message1Idx

Отображаемое на экране Антифрод-терминала сообщение при запросе на ввод пользователем PIN-кода.

CK_BYTE m_Message2Idx

Отображаемое на экране Антифрод-терминала сообщение при запросе на ввод пользователем PIN-кода.

Примечание

Подробнее об отображении на экране сообщений см. m_MessageIdx.

AFT_SAVE_ADMIN_PIN_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_SAVE_ADMIN_PIN_ARGUMENTS
typedef struct AFT_SAVE_ADMIN_PIN_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
  CK_BYTE  m_PINLength;
  CK_BYTE  m_PINvalue[];
} AFT_SAVE_ADMIN_PIN_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

CK_BYTE m_PINLength

Длина PIN-кода.

CK_BYTE m_PINvalue[]

Значение PIN-кода.

AFT_INIT_CARD_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_INIT_CARD_ARGUMENTS
typedef struct AFT_INIT_CARD_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
} AFT_INIT_CARD_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

AFT_LOGIN_SO_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_LOGIN_SO_ARGUMENTS
typedef struct AFT_LOGIN_SO_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
} AFT_LOGIN_SO_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секунднах, 0 - тайм-аут по умолчанию, равен 60 сек.

AFT_SET_USER_PIN_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_SET_USER_PIN_ARGUMENTS
typedef struct AFT_SET_USER_PIN_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
} AFT_SET_USER_PIN_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

AFT_VERIFY_PIN_ARGUMENTS

Используется функцией JC_Antifraud().

AFT_VERIFY_PIN_ARGUMENTS
typedef struct AFT_VERIFY_PIN_ARGUMENTS {
  CK_ULONG m_AFTLanguage;
  CK_BYTE m_AFTTimeout;
  CK_BYTE  m_MessageIdx;
} AFT_VERIFY_PIN_ARGUMENTS;
CK_ULONG m_AFTLanguage

Код языка. 0x0409 - английский, 0x0419 - русский.

CK_BYTE m_AFTTimeout

Тайм-аут ожидания ввода пользователя на Антифрод-терминале. Измеряется в секундах, 0 - тайм-аут по умолчанию, равен 60 сек.

CK_BYTE m_MessageIdx

Отображаемое на экране Антифрод-терминала сообщение при запросе на ввод пользователем PIN-кода.

Примечание

Подробнее об отображении на экране сообщений см. m_MessageIdx.

AFT_IS_CARDLESS_MODE_SUPPORTED_RESPONCE

Используется функцией JC_Antifraud().

AFT_IS_CARDLESS_MODE_SUPPORTED_RESPONCE
typedef struct AFT_IS_CARDLESS_MODE_SUPPORTED_RESPONCE {
  CK_BYTE m_CardlessSupport;
} AFT_IS_CARDLESS_MODE_SUPPORTED_RESPONCE;
CK_BYTE m_CardlessSupport

Поддержка бескарточного режима работы. 1 - поддерживается, 0 - не поддерживается.

m_MessageIdx

Используется функцией JC_Antifraud().

m_MessageIdx

Значение m_MessageIdx определяет сообщение, которое выводится на экран терминала при запросе на ввод или подтверждение пользователем PIN-кода (операции AFT_ENTER_ADMIN_PIN, AFT_VERIFY_PIN и AFT_PIN_MODIFY). m_MessageIdx представляет собой 1 байт, разделенный на два полубайта (правый и левый) по 4 бита. Правый (младший) полубайт определяет первую строку сообщения, выводимого на экран, и соответствует битам 0-3. Левый (старший) полубайт соответствует битам 4-7 и определяет вторую строку сообщения.

Правый полубайт может принимать значение в диапазоне от 0 до 2, левый от 0 до 3. Каждому значению полубайта соответствует одна строка текста (см. таблицу ниже.) Значение целого байта определяет весь отображаемый на экране текст. Например, байт со значением 0x20 соответствует следующему сообщению: Введите PIN-код администратора.

Возможные значения каждого полубайта и соответствующий им текст приведены в таблицах ниже.

Для русского языка:

Правый (младший) полубайт, биты 0-3 Левый (старший) полубайт, биты 4-7:
Значение Выводимый текст Значение Выводимый текст
0 “Введите PIN-код” 0 пустая строка
1 “Введите новый PIN” 1 “пользователя”
2 “Повторите PIN” 2 “администратора”
3 “подписи”

Для английского языка:

Правый (младший) полубайт, биты 0-3 Левый (старший) полубайт, биты 4-7:
Значение Выводимый текст Значение Выводимый текст
0 “Enter PIN” 0 пустая строка
1 “Enter new PIN” 1 “of user”
2 “Repeat PIN” 2 “of admin”
3 “for signature”

Оглавление