ПАО ”Московская Биржа” УТВЕРЖДЕН ВАМБ.00075-02 33 01–ЛУ АППАРАТНО-ПРОГРАММНЫЙ КОМПЛЕКС «КЛИЕНТ УДОСТОВЕРЯЮЩЕГО ЦЕНТРА «УЦ МБ» ВЕРСИЯ 2.0» БИБЛИОТЕКА УПРОЩЕННОГО ПРИКЛАДНОГО ПРОГРАММНОГО ИНТЕРФЕЙСА ДЛЯ РАБОТЫ С СЕРТИФИКАТАМИ РУКОВОДСТВО ПРОГРАММИСТА ВАМБ.00075-02 33 01 2015 2 ВАМБ.00075-02 33 01 Аннотация Данный документ содержит описание библиотеки упрощенного прикладного программного интерфейса для работы с сертификатами для платформы ОС Microsoft Windows (далее по тексту WIN32), входящей в состав аппаратно-программного комплекса ”Клиент МБ” версия 2.0 (далее по тексту - АПК ”Клиент МБ”). Документ предназначен для разработчиков прикладного программного обеспечения (ППО). При встраивании библиотеки предполагается, что системный программист имеет знания о существующей архитектуре системы сертификатов открытых ключей, используемых рекомендациях и стандартах. 3 ВАМБ.00075-02 33 01 Содержание 1 БИБЛИОТЕКА ПРИКЛАДНОГО ПРОГРАММНОГО ИНТЕРФЕЙСА РАБОТЫ С СЕРТИФИКАТАМИ ДЛЯ ОС WINDOWS 1.1 Назначение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Характеристики библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Использование библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Условия, необходимые для использования библиотеки . . . . . . . . . . . . 1.3.2 Состав библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Описание данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 Константы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.3 Перечисления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.4 Общие структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.5 Структуры инициализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.6 Структуры, уникально идентифицирующие сертификат . . . . . . . . . . . 1.4.7 Структуры, описывающие сертификат . . . . . . . . . . . . . . . . . . . . . 1.4.8 Структуры, описывающие СОС . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.9 Параметры выполнения функций . . . . . . . . . . . . . . . . . . . . . . . . 1.4.10 Результаты выполнения функций . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Описание функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Функции инициализации и деинициализации . . . . . . . . . . . . . . . . . 1.5.2 Функции работы с блоками памяти (блочные функции) . . . . . . . . . . . 1.5.3 Функции работы с блоками памяти (потоковые функции) . . . . . . . . . . 1.5.4 Функции работы с файлами (блочные функции) . . . . . . . . . . . . . . . 1.5.5 Функции работы с файлами (потоковые функции) . . . . . . . . . . . . . . 1.5.6 Низкоуровневые функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.7 Функции преобразования форматов . . . . . . . . . . . . . . . . . . . . . . . 1.5.8 Вспомогательные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.9 Функции работы с памятью . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.10 Функции работы со штампами времени . . . . . . . . . . . . . . . . . . . . . 1.5.11 Функции определения статуса сертификатов . . . . . . . . . . . . . . . . . . 1.6 Описание файла конфигурации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 5 5 5 6 6 6 13 14 14 14 15 18 19 24 27 27 30 37 43 46 48 50 52 60 63 66 67 2 ОПИСАНИЕ ОШИБОК 69 ПЕРЕЧЕНЬ ТАБЛИЦ 75 4 ВАМБ.00075-02 33 01 1 БИБЛИОТЕКА ПРИКЛАДНОГО ПРОГРАММНОГО ИНТЕРФЕЙСА РАБОТЫ С СЕРТИФИКАТАМИ ДЛЯ ОС WINDOWS 1.1 Назначение Библиотека прикладного программного интерфейса работы с сертификатами для операционной системы (ОС) Windows (далее по тексту - библиотека или библиотека API) является составной частью программного обеспечения (ПО) АПК ”Клиент МБ” версия 2.0 и обеспечивает функции аутентификации в соответствии с рекомендациями Х.509, электронной подписи (ЭП) по ГОСТ Р 34.10-2001, ГОСТ Р 34.10-2012, ГОСТ Р 34.11-94, ГОСТ Р 34.11-2012 и шифрования по ГОСТ 28147-89. Примечания: 1 ПО АПК ”Клиент МБ” версия 2.0 работает под управлением ОС Microsoft Windows (как 32-битных - x86, так и 64-битных - x64), в зависимости от выбора пользователя при установке ПО с передаточного носителя. 2 При использовании блочных функций ПО АПК ”Клиент МБ” версия 2.0 для 32-битных (x86) ОС Microsoft Windows обеспечивает выполнение функций зашифрования/расшифрования и создания/проверки ЭП под файлом или областью памяти объёмом максимум до 400 Мбайт, а для 64-битных (x64) ОС Microsoft Windows - объёмом максимум до 2 Гбайт. При этом данные величины могут быть уменьшены в зависимости от текущего использования и гранулированности виртуальной памяти вызывающего процесса. 3 При использовании потоковых функций ПО АПК ”Клиент МБ” версия 2.0 как для 32-битных (x86) ОС Microsoft Windows, так и для 64-битных (x64) ОС Microsoft Windows, обеспечивает выполнение функций зашифрования/расшифрования и создания/проверки ЭП под файлом или областью памяти без ограничения общего объема. 4 Библиотека xpki1.dll всегда имеет такую же битность, как и ПО АПК ”Клиент МБ” версия 2.0, в состав которого она входит. Битность библиотеки xpki1.dll должна совпадать с битностью использующего ее прикладного ПО. Реализация криптографических функций, доступных посредством библиотеки API, основана на использовании криптографического ядра СКЗИ ”Валидата CSP” версия 4.0 (далее СКЗИ ”Валидата CSP”). Библиотека обеспечивает обращение к следующим функциям: − зашифрование и расшифрование файла; − зашифрование и расшифрование области памяти; − создание ЭП файла; − создание ЭП области памяти; − проверка ЭП файла; − проверка ЭП области памяти; − удаление ЭП из файла; − удаление ЭП из области памяти; − выработка хэш-значения для файла; 5 ВАМБ.00075-02 33 01 − выработка хэш-значения для области памяти; − преобразование отделенной и совмещенной ЭП; − преобразование бинарных данных в/из формата Base64; − создание ЭП хэш-функции данных; − проверка ЭП хэш-функции данных; − выработка случайного числа заданной длины. 1.2 Характеристики библиотеки В качестве алгоритма ЭП используется асимметричный вариант ЭП, а именно криптосистема с двумя ключевыми элементами - открытым (общедоступным) и закрытым по ГОСТ Р 34.10-2001 и ГОСТ Р 34.10-2012. Для формирования хэш-функции сообщения используются алгоритмы по ГОСТ Р 34.11-94 и ГОСТ Р 34.11-2012. Шифрование информации выполняется по ГОСТ 28147-89. Библиотека предназначена для работы в следующих локализованных операционных системах: − Windows Professional XP SP3 или выше для платформ x86 или x64; − Windows Server 2003 SP2 или выше для платформ x86 или x64; − Windows Vista SP1 или выше для платформ x86 или x64; − Windows Server 2008 SP1 или выше для платформ x86 или x64; − Windows 7 для платформ x86 или x64; − Windows Server 2008 R2 для платформы x64; − Windows 8/8.1 для платформ x86 или x64; − Windows Server 2012/2012 R2 для платформы x64. 1.3 Использование библиотеки 1.3.1 Условия, необходимые для использования библиотеки При использовании библиотеки необходимо соблюдать следующие условия: − библиотека предназначена для использования в приложениях, написанных на языках программирования C или C++ либо совместимых с ними по форматам данных и параметрам вызова функций; − при использовании библиотеки в приложениях, написанных на других языках программирования, должно выполняться требуемое преобразование форматов данных и параметров вызова функций. 1.3.2 Состав библиотеки В состав библиотеки входят следующие файлы: − xpki1.dll – модуль динамической библиотеки; − xpki1.lib – модуль библиотеки для линковки c динамической библиотекой; − vcert1.h – файл с описанием прототипов функций библиотеки; − vcerterr.h – файл с определениями кодов возврата функций библиотеки. 6 ВАМБ.00075-02 33 01 При сборке, используя указанные выше файлы vcert1.h и vcerterr.h, необходимо использовать макро _CCERT_ для того, чтобы размеры структур переменной длины (в частности, altname_t) вычислялись корректно. На платформе Microsoft Windows (далее по тексту - WIN32) используется соглашение о вызовах функций языка ”Pascal” (__stdcall). 1.4 Описание данных 1.4.1 Типы typedef unsigned int error_status_t Код ошибки. typedef void * context_t Контекст сессии работы с библиотекой. typedef void * strhash_t Контекст потокового хэширования данных. typedef void * strsign_t Контекст потокового вычисления ЭП данных. typedef void * strverify_t Контекст потоковой проверки ЭП данных. typedef void * strencrypt_t Контекст потокового зашифрования данных. typedef void * strdecrypt_t Контекст потокового расшифрования данных. typedef unsigned char * string_t Строка, заканчивающаяся NULL. Там, где не указано обратное, строковые данные должны быть в кодировке Windows Code Page 1251 (CP1251). typedef unsigned int certinfo_t Требуемая информация о сертификате (поля сертификата, константы FIELD_XXX). typedef unsigned int crlinfo_t Требуемая информация о СОС (поля СОС, константы FIELD_CRL_XXX). typedef unsigned int keyusage_t Возможные области применения ключа. typedef unsigned int date_t Время в секундах, прошедшее с 00:00 01.01.1970 UTC – аналогично 32-битному time_t. typedef unsigned int flag_t Параметры выполнения функции. 1.4.2 Константы Заполненные поля сертификата (структуры certificate_t): #define FIELD_SERIAL (1 « 0) Поле с серийным номером. #define FIELD_ISSUER (1 « 1) Поле издателя сертификата. #define FIELD_SUBJECT (1 « 2) Поле владельца сертификата. #define FIELD_NOTBEFORE (1 « 5) Поле с датой начала действия сертификата. #define FIELD_NOTAFTER (1 « 6) Поле с датой окончания действия сертификата. 7 ВАМБ.00075-02 33 01 #define FIELD_KEYUSAGE (1 « 7) Поле с возможной областью применения сертификата. #define FIELD_ISSUERALTNAME (1 « 8) Поле с альтернативным именем издателя сертификата. #define FIELD_SUBJECTALTNAME (1 « 9) Поле с альтернативным именем владельца сертификата. #define FIELD_EXTKEYUSAGE (1 « 10) Поля с расширенной областью использования ключа. #define FIELD_POLICY (1 « 11) Поля с политиками использования сертификата. #define FIELD_EXTENSIONS (1 « 12) Поля с расширениями сертификата. #define FIELD_NOTBEFOREPRIVATE (1 « 13) Поле с датой начала действия закрытого ключа сертификата. #define FIELD_NOTAFTERPRIVATE (1 « 14) Поле с датой окончания действия закрытого ключа сертификата. #define FIELD_KEYID (1 « 15) Поле с идентификатором ключа, соответствующего сертификату (может использоваться для уникального выбора сертификата). #define FIELD_CERTENCODED (1 « 16) Сертификат в DER-кодировке. #define FIELD_CERTHASH (1 « 17) Хэш сертификата (может использоваться для уникального выбора сертификата). #define FIELD_ALGORITHM (1 « 18) Алгоритм открытого ключа сертификата (может использоваться при работе с несколькими криптографическими системами). #define FIELD_ALL (FIELD_SERIAL | FIELD_ISSUER | FIELD_SUBJECT | FIELD_ISSUERUID | FIELD_SUBJECTUID | FIELD_NOTBEFORE | FIELD_NOTAFTER | FIELD_KEYUSAGE | FIELD_ISSUERALTNAME | FIELD_SUBJECTALTNAME | FIELD_EXTKEYUSAGE | FIELD_POLICY | FIELD_EXTENSIONS | FIELD_NOTBEFOREPRIVATE | FIELD_NOTAFTERPRIVATE | FIELD_KEYID | FIELD_CERTENCODED | FIELD_CERTHASH | FIELD_ALGORITHM) Все поля сертификата. #define FIELD_ALGORITHM_OID_FORMAT (1 « 31) Возвращать алгоритм открытого ключа сертификата как OID в текстовом виде. Заполненные поля СОС (структуры crl_t): #define FIELD_CRL_ISSUER (1 « 0) Поле издателя СОС. #define FIELD_CRL_LASTUPDATE (1 « 1) Поле с датой начала действия СОС. #define FIELD_CRL_NEXTUPDATE (1 « 2) Поле с датой окончания действия СОС. #define FIELD_CRL_NUMBER (1 « 3) Поле с порядковым номером СОС. #define FIELD_CRL_REVOKED (1 « 4) Поле со списком отозванных сертификатов. #define FIELD_CRL_CRLENCODED (1 « 5) 8 ВАМБ.00075-02 33 01 СОС в DER-кодировке. #define FIELD_CRL_CRLHASH (1 « 6) Хэш СОС (может использоваться для уникального выбора СОС) - в настоящее время не поддерживается. #define FIELD_CRL_ALL (FIELD_CRL_ISSUER | FIELD_CRL_LASTUPDATE | FIELD_CRL_NEXTUPDATE | FIELD_CRL_NUMBER | FIELD_CRL_REVOKED | FIELD_CRL_CRLENCODED | FIELD_CRL_CRLHASH) Все поля СОС. Биты возможных областей использования открытого ключа сертификата: #define KEYUSAGE_DIGITAL_SIGNATURE (1 « 0) Использование для вычисления ЭП. #define KEYUSAGE_NON_REPUDIATION (1 « 1) Неотрекаемость. #define KEYUSAGE_KEY_ENCIPHERMENT (1 « 2) Использование для шифрования сессионного ключа. #define KEYUSAGE_DATA_ENCIPHERMENT (1 « 3) Использование для шифрования данных. #define KEYUSAGE_KEY_AGREEMENT (1 « 4) Использование для выполнения соглашения о ключах (выработки сессионного ключа). #define KEYUSAGE_KEY_CERT_SIGN (1 « 5) Использование для подписи сертификатов (установлен в сертификатах Центра Регистрации (ЦР) и Центра Сертификации (ЦС)). #define KEYUSAGE_CRL_SIGN (1 « 6) Использование для подписи списков отозванных сертификатов (СОС) (установлен в сертификатах ЦР и ЦС). #define KEYUSAGE_ENCIPHER_ONLY (1 « 7) Использование для только для зашифрования данных (при условии выработки сессионного ключа). #define KEYUSAGE_DECIPHER_ONLY (1 « 8) Использование для только для расшифрования данных (при условии выработки сессионного ключа). Алгоритмы открытого ключа сертификата: #define ALGORITHM_GOST_R_34_10_2001 (”GOST R 34.10-2001”) Открытый ключ сертификата соответствует ГОСТ Р 34.10-2001. #define ALGORITHM_GOST_R_34_10_2012 (”GOST R 34.10-2012”) Открытый ключ сертификата соответствует ГОСТ Р 34.10-2012. Общие флаги криптографических функций: #define FLAG_PKCS7 ( 1 « 0 ) Формат сообщения PKCS#7. Общие флаги функций вычисления/проверки ЭП (структур sign_param_t и verify_param_t): #define FLAG_DETACHED (1 « 1) Сообщение в формате с отсоединенной подписью. 9 ВАМБ.00075-02 33 01 Флаги инициализации (только при использовании локального СКЗИ): Используются только при работе с локальным СКЗИ в функциях VCERT_Initialize() и VCERT_InitializeEx() #define FLAG_INIT_NOCRLUPDATE (1 « 0) Не выполнять автоматическое обновление списка отозванных сертификатов (СОС) при инициализации. #define FLAG_INIT_CHECKEXPIRED (1 « 1) Показывать объекты с истекающим сроком действия при инициализации. При задании данного флага производится поиск рабочего сертификата с истекающим сроком действия закрытого ключа, и истекающих сертификатов ЦС и СОС. Интервалы истечения объектов задаются в ключе Реестра HKEY_CURRENT_USER\SOTWARE\Validata\xcs. Значение TimeWarnExpiredCert типа REG_DWORD указывает интервал истечения закрытого ключа рабочего сертификата или сертификатов ЦС в днях (по умолчанию - 30 дней). Значение TimeWarnExpiredCrl типа REG_DWORD указывает интервал истечения СОС в днях (по умолчанию - 14 дней). #define FLAG_INIT_NOLDAP (1 « 2) Не использовать сетевой справочник при поиске сертификатов. #define FLAG_INIT_NOSAVECACHE (1 « 5) Не сбрасывать объекты из кэша в локальный справочник при деинициализации контекста библиотеки. #define FLAG_INIT_REGISTRY (1 « 6) Использовать профили Справочника сертификатов из Реестра вместо конфигурационного файла pki1.conf. #define FLAG_INIT_FORCE_CACHE_CERTS (1 « 7) Принудительно кэшировать сертификаты, предназначенные для шифрования, при инициализации контекста библиотеки. #define FLAG_INIT_ALLOW_RA_IN_CHAIN (1 « 8) Разрешить наличие сертификата и СОС ЦР в качестве промежуточных объектов в цепочке при ее проверке. #define FLAG_INIT_LDAP_CHAIN_SEARCH (1 « 9) Разрешить выполнение поиска сертификатов промежуточных ЦС и СОС в сетевом справочнике при построении цепочек. #define FLAG_INIT_USE_AIA_CDP (1 « 10) Разрешить доступ к точкам AIA и CDP для загрузки сертификатов промежуточных ЦС и СОС при построении цепочек. #define FLAG_INIT_SILENT_KEYLOAD (1 « 11) Не выдавать пользовательский интерфейс при загрузке закрытого ключа. #define FLAG_INIT_VERIFYCONTEXT (0x80000000) Загрузка контекста без доступа к закрытому ключу. При этом будут выполняться только функции, не требующие работы с закрытым ключом (хэширования, проверки ЭП). Флаги функций вычисления ЭП (структуры sign_param_t): Используются флаги FLAG_PKCS7 и FLAG_DETACHED #define FLAG_SIGN_SENDCERT (1 « 3) Добавить свой сертификат в подписанное сообщение (при использовании PKCS#7). Флаги функций проверки ЭП (структуры verify_param_t): Используются флаги FLAG_PKCS7 и FLAG_DETACHED 10 ВАМБ.00075-02 33 01 #define FLAG_VERIFY_DELSIGN (1 « 2) Удалить подпись при проверке ЭП. #define FLAG_VERIFY_KEYUSAGE (1 « 3) Проверять использование ключа сертификата. #define FLAG_VERIFY_POLICY (1 « 4) Проверять политику сертификата. #define FLAG_VERIFY_EXTKEYUSAGE (1 « 5) Проверять расширенное использование ключа. #define FLAG_VERIFY_MINSIGNS (1 « 7) Проверять минимальное количество ЭП. #define FLAG_VERIFY_NOTIMECHECK (1 « 10) Не проверять времена действия сертификатов и СОС. Данный флаг позволяет избежать проверки сроков действия сертификатов и СОС при построении цепочки сертификата отправителя. #define FLAG_VERIFY_NOCACHECERT (1 « 11) Не добавлять автоматически найденные сертификаты из сообщения в справочник. #define FLAG_VERIFY_NOATTACHEDCERT ( 1 « 12 ) Не использовать сертификаты из сообщения в формате PKCS#7. #define FLAG_VERIFY_USEREVTIME (1 « 13) Использовать время отзыва сертификата из СОС при проверке цепочки. #define DELETE_ALL_SIGNS (-1) Удалить все подписи. Флаги функций выполнения зашифрования (структуры encrypt_param_t): Используется флаг FLAG_PKCS7 #define FLAG_ENCRYPT_REMOTE (1 « 2) Искать сертификаты получателей в сетевом справочнике сертификатов. #define FLAG_ENCRYPT_NOTIMECHECK (1 « 4) Не проверять времена действия сертификата получателя. #define FLAG_ENCRYPT_NOVERIFY (1 « 5) Не проверять действительность сертификата получателя. #define FLAG_ENCRYPT_ADD_LDAP2LOCAL (1 « 7) Добавлять сертификат получателя, найденный в сетевом справочнике, в локальный справочник. Данный флаг действует только для поиска сертификатов получателей по уникальному критерию (издателю и серийному номеру, идентификатору ключа или хэшу сертификата). #define FLAG_ENCRYPT_NOKEYTIMECHECK (1 « 8) Не проверять времена действия закрытого ключа сертификата получателя. #define FLAG_ENCRYPT_PARTIAL_SUBJECT (1 « 9) При установке данного флага поиск сертификатов получателей зашифрованного сообщения производится по части X.500-имени владельца, т.е. поле subject шаблона сертификата считается заполненным частично (например, ”OU=7395399001”). Такой поиск поддерживается только для локальных справочников, расположенных в хранилище ODBC, а также для кэша и для сетевых справочников. #define FLAG_ENCRYPT_IGNORE_CACHED (1 « 10) Не выполнять поиск среди кэшированных объектов. #define FLAG_ENCRYPT_IGNORE_LOCAL (1 « 11) Не выполнять поиск в локальном справочнике. 11 ВАМБ.00075-02 33 01 Флаги функций выполнения расшифрования (структуры decrypt_param_t): Используется флаг FLAG_PKCS7 #define FLAG_DECRYPT_NOCACHE (1 « 1) Не кэшировать найденный сертификат отправителя (только при использовании неанонимного шифрования). #define FLAG_DECRYPT_NOCRLCHECK (1 « 2) Не проверять наличие сертификата отправителя в СОС (только при использовании неанонимного шифрования). Флаги функции поиска сертификатов (структуры find_param_t): #define FLAG_FIND_MY (1 « 0) Искать только сертификаты, для которых есть закрытый ключ (используется для получения информации о ”своем” сертификате при использовании локального СКЗИ). #define FLAG_FIND_REMOTE (1 « 2) Искать также в сетевом справочнике (директории LDAP) (по умолчанию поиск производится только в локальном справочнике). #define FLAG_FIND_SELECTUI (1 « 3) Показывать диалог выбора сертификата при нахождении нескольких сертификатов (только при использовании локального СКЗИ). #define FLAG_FIND_NOTIMECHECK (1 « 4) Не проверять времена действия сертификата. #define FLAG_FIND_NOVERIFY (1 « 5) Не проверять действительность сертификата. #define FLAG_FIND_ADD_LDAP2LOCAL (1 « 7) Добавлять сертификат, найденный в сетевом справочнике, в локальный справочник. Данный флаг действует только для поиска сертификатов по уникальному критерию (издателю и серийному номеру, идентификатору ключа или хэшу сертификата). #define FLAG_FIND_NOKEYTIMECHECK (1 « 8) Не проверять времена действия закрытого ключа сертификата. #define FLAG_FIND_PARTIAL_SUBJECT (1 « 9) При установке данного флага поиск сертификатов производится по части X.500-имени владельца, т.е. поле subject шаблона сертификата считается заполненным частично (например, ”OU=7395399001”). Такой поиск поддерживается только для локальных справочников, расположенных в хранилище ODBC, а также для кэша и для сетевых справочников. #define FLAG_FIND_IGNORE_CACHED (1 « 10) Не выполнять поиск среди кэшированных объектов. #define FLAG_FIND_IGNORE_LOCAL (1 « 11) Не выполнять поиск в локальном справочнике. Флаги функции импорта (структуры import_param_t): #define FLAG_IMPORT_UI (1 « 0) Отображать пользовательский интерфейс показа объекта при импорте. #define FLAG_IMPORT_CERTIFICATE (1 « 1) Импортировать сертификат в DER-кодировке. #define FLAG_IMPORT_CRL (1 « 2) Импортировать список отозванных сертификатов в DER-кодировке. #define FLAG_IMPORT_MY_CERTIFICATE (1 « 3) Импортировать свой новый сертификат (с проверкой доступа к закрытому ключу, соот- 12 ВАМБ.00075-02 33 01 ветствующему сертификату) и установить как рабочий. Примечание - Эта операция не поддерживает параллельное (многопоточное) выполнение. Для использования нового сертификата как рабочего необходимо завершить текущий сеанс работы с библиотекой, вызвав функцию VCERT_Uninitialize. #define FLAG_IMPORT_UPDATE (1 « 4) Импортировать обновление от ЦР или ЦС. Флаги функции экспорта (структуры export_param_t): #define FLAG_EXPORT_UI (1 « 0) Отображать пользовательский интерфейс показа объекта при экспорте. #define FLAG_EXPORT_ASN1 (1 « 1) Экспортировать объект в DER-кодировке. По умолчанию объект подписывается на рабочем сертификате в формате PKCS#7. #define FLAG_EXPORT_NEWREQUEST (1 « 2) Создать запрос на новый сертификат с генерацией новой ключевой пары в зависимости от того, запрещено или, соответственно, разрешено использование шифрования в текущем рабочем сертификате. #define FLAG_EXPORT_REVREQUEST (1 « 3) Создать запрос на отзыв текущего рабочего сертификата. #define FLAG_EXPORT_ETOKEN_GOST (1 « 5) Выполнить генерацию закрытого ключа с помощью СКЗИ КриптоПро eToken CSP. #define FLAG_EXPORT_RUTOKEN_GOST (1 « 6) Выполнить генерацию закрытого ключа с помощью СКЗИ КриптоПро Rutoken CSP. #define FLAG_EXPORT_GOST_R_34_10_2012 (1 « 8) Выполнить генерацию закрытого ключа для квалифицированного сертификата по ГОСТ Р 34.10-2012. Флаги функции проверки сертификата (структуры verify_policy_param_t): #define FLAG_POLICY_NOTIMECHECK (1« 2) Не проверять времена действия сертификата/СОС в цепочке. #define FLAG_POLICY_VERIFY_CRL (1 « 5) Выполнять построение цепочки и проверку политики СОС, а не сертификата. #define FLAG_POLICY_NOKEYTIMECHECK (1 « 6) Не проверять времена действия закрытого ключа. Флаги функции создания запроса на получение штампа времени из ЭП формата PKCS#7 (структуры tsp_request_param_t): #define FLAG_TSP_REQUEST_ADD_NONCE (1 « 1) Добавлять случайную посылку (NONCE) в запрос на получение штампа времени. #define FLAG_TSP_REQUEST_CERT_REQUEST (1 « 2) Требовать включение сертификата авторитетного источника (Time Stamp Authority) в запросе на получение штампа времени. Флаги функции вычисления ЭП запроса на получение штампа времени (структуры tsp_response_param_t): #define FLAG_TSP_RESPONSE_ADD_TSA_NAME (1 « 1) Добавлять имя авторитетного источника (Time Stamp Authority) при вычислении ЭП запроса на получение штампа времени. 13 ВАМБ.00075-02 33 01 Флаги функции проверки ЭП запроса на получение штампа времени (структуры tsp_verify_param_t): #define FLAG_TSP_VERIFY_NOATTACHEDCERT (1 « 1) Не использовать сертификат из сообщения для проверки ЭП. Флаги функции получения информации о сообщении в формате PKCS#7 (структуры pkcs7_info_t): #define FLAG_PKCS7_INFO_TYPE_SIGNED (1 « 1) Сообщение в формате PKCS#7 является подписанным. #define FLAG_PKCS7_INFO_TYPE_ENVELOPED (1 « 2) Сообщение в формате PKCS#7 является зашифрованным. #define FLAG_PKCS7_INFO_TYPE_DETACHED (1 « 3) Сообщение в формате PKCS#7 является подписанным с отсоединенной(ыми) ЭП. Флаги функции формирования закрытого ключа и XML запроса: #define FLAG_XML_REQUEST_ETOKEN_GOST (1 « 1) Использовать для генерации закрытого ключа запроса СКЗИ КриптоПро eToken CSP. #define FLAG_XML_REQUEST_DO_NOT_GENERATE (1 « 2) Создать XML запрос без генерации нового закрытого ключа. #define FLAG_XML_REQUEST_RUTOKEN_GOST (1 « 3) Использовать для генерации закрытого ключа запроса СКЗИ КриптоПро Rutoken CSP. #define FLAG_XML_REQUEST_GOST_R_34_10_2012 (1 « 5) Генерировать закрытый ключ запроса для квалифицированного сертификата по ГОСТ Р 34.10-2012. Флаги функции экспорта в системное хранилище ОС Windows: #define FLAG_EXPORT_SYSTEM_STORE_MACHINE (1 « 1) Осуществлять экспорт сертификатов и СОС в системное хранилище компьютера (по умолчанию - пользователя). Примечание - Эта операция требует наличия прав локального администратора. 1.4.3 Перечисления Перечисление enum crypt_prov_t Тип используемого СКЗИ. Элементы перечисления: CRYPT_LOCAL Локальное СКЗИ. Перечисление enum idchoice_t Выбор идентификации сертификата (уникальный идентификатор сертификата). Элементы перечисления: ID_ISSUER_AND_SERIAL по издателю и серийному номеру. ID_KEYID по идентификатору закрытого ключа. ID_CERTHASH по хэшу сертификата. 14 ВАМБ.00075-02 33 01 1.4.4 Общие структуры Структура mem_blk_t Блок данных. Состав: − unsigned int len Размер буфера (не может быть более 2 Гбайт). − unsigned char * buf Буфер (указатель на блок данных). 1.4.5 Структуры инициализации Структура local_param_t Параметры инициализации локального СКЗИ. Состав: − size_t size Размер (в байтах) структуры, должен быть равен sizeof(local_param_t). − flag_t flag Флаг инициализации (смотри FLAG_INIT_XXX). − char * pse Путь к Персональному pse://signed/C:\Users\Ivanov\local.pse. справочнику сертификатов (ПСП) - − char * localstore Путь к Локальному справочнику сертификатов (ЛСП) - file://C:\Users\Ivanov\local.gdbm. − char * ldap Путь к сетевому справочнику (LDAP) - ldap://simple/ldap.x509.ru/cn=Users,dc=x509,dc=ru. − char * pincode ПИН-код ключевого носителя типа смарт-карта. 1.4.6 Структуры, уникально идентифицирующие сертификат Структура issuer_and_serial_t Издатель и серийный номер сертификата. Состав: − string_t issuer Издатель (в виде строки CN=Users,DC=x509,DC=ru). Distinguished Name (DN) LDAP \0, например, − string_t serialNumber Серийный номер сертификата (в виде hex-строки \0, например, 40:00:00:01). Структура certid_t Уникальный идентификатор сертификата. Состав: − idchoice_t type Выбор идентификации (ID_ISSUER_AND_SERIAL или ID_KEYID или ID_CERTHASH). − union id − issuer_and_serial_t ias Издатель и серийный номер сертификата (в случае ID_ISSUER_AND_SERIAL). 15 ВАМБ.00075-02 33 01 − string_t keyId Идентификатор ключа (в случае ID_KEYID). − mem_blk_t certHash Хэш сертификата (в случае ID_CERTHASH). 1.4.7 Структуры, описывающие сертификат Структура altname_t Альтернативное имя (издателя или владельца сертификата). Состав: − string_t emailAddress RFC 822 Email адрес. − string_t DNS DNS адрес. − string_t URI URI адрес. − string_t IP IP адрес. − string_t organizationName Наименование организации (в кодировке CP1251). − string_t registredAddress Зарегистрированный адрес (в кодировке CP1251). − string_t surname Ф.И.О владельца сертификата (в кодировке CP1251). − string_t businessCategory Должность (в кодировке CP1251). − string_t telephoneNumber Номер телефона. − string_t description Описание (в кодировке CP1251). − string_t account_number Номер расчетного счета. − string_t bank_id Банковский идентификационный код. − string_t physicalDelivery Почтовый адрес (в кодировке CP1251). − string_t exchange_address Адрес Microsoft Exchange. − string_t notes_address Адрес Lotus Notes. Структура othername_t Другое имя. Состав: − string_t oid 16 ВАМБ.00075-02 33 01 OID, идентифицирующий другое имя. − string_t name Текстовые данные другого имени. Структура altname_ex_t Массив других имен альтернативного имени (издателя или владельца сертификата). Состав: − unsigned int othername_num Число других имен. − othername_t * othernames Массив других имен. Структура basic_constraints_ex_t Базовые ограничения. Состав: − unsigned int ca Признак сертификата ЦС. − int pathlen Максимальная длина цепочки. Значение -1 означает отсутствие ограничения на длину цепочки. Структура extkeyusage_t Расширенное использование ключа сертификата. Состав: − string_t oid OID, идентифицирующий применение ключа сертификата. Структура extension_t Дополнение сертификата. Состав: − string_t oid OID, идентифицирующий дополнение. − unsigned int type Тип дополнения. − unsigned int critical Флаг критичности. − unsigned int len Размер блока данных расширения. − unsigned char * data Блок данных расширения в DER-кодировке. Структура policy_t Политика использования сертификата. Состав: − string_t oid OID, идентифицирующий политику. − string_t org_name 17 ВАМБ.00075-02 33 01 Название организации. − string_t text Текст политики использования сертификата. Структура certificate_t Структура сертификата. Состав: − certinfo_t fields Содержит побитовое ИЛИ тех и только тех констант FIELD_XXX, для которых в соответствующих им полях структуры заданы значения (например, при задании FIELD_SUBJECT | FIELD_CERTHASH заполнены только поля subject и certHash). − string_t issuer X.500 имя издателя (в виде строки DN LDAP \0). При задании FIELD_ISSUER в поле fields. − string_t serialNumber Серийный номер сертификата (в виде hex-строки \0). При задании FIELD_SERIALNUMBER в поле fields. − string_t subject X.500 имя владельца (в виде строки DN LDAP \0). При задании FIELD_SUBJECT в поле fields. При заполнении шаблона сертификата для выполнения поиска (см. описание функции VCERT_FindCert()) имя владельца можно задавать частично или использовать подстановочные знаки-маски ”*” и ”?”: ∙ при выполнении поиска сертификатов в кэше или в локальном справочнике сертификатов, расположенном в хранилище GDBM, допускается подавать строку, заполненную частично с подстановочными знаками-масками ”*” и ”?” (например, ”*,OU=123456789,*”). В этом случае будет производиться перебор всех найденных сертификатов на соответствие имени владельца заданному регулярному выражению; ∙ при выполнении поиска сертификатов в локальном справочнике сертификатов, расположенном в хранилище ODBC, в кэше или в сетевом справочнике сертификатов, допускается подавать строку, заполненную частично (например, ”OU=7395399001”). В этом случае, при задании флага поиска FLAG_FIND_PARTIAL_SUBJECT, все сертификаты, находящиеся в справочнике, будут проверяться на соответствие заданному частично имени владельца; ∙ при выполнении поиска сертификатов в сетевом справочнике сертификатов допускается подавать строку, заполненную частично и, возможно, с подстановочным знакоммаской ”*” (например, ”INN=770200040698” или ”INN=7702000406*”). В этом случае будет производиться поиск сертификатов во всех контейнерах директории LDAP, содержащих в своем Relative DN (RDN) заданное частично имя владельца, с учетом, при его наличии, подстановочного знака-маски ”*”. − string_t algorithm Алгоритм открытого ключа. При задании FIELD_ALGORITHM в поле fields. − date_t notBefore Время начала действия сертификата. При задании FIELD_NOTBEFORE в поле fields. − date_t notAfter Время окончания действия сертификата. При задании FIELD_NOTAFTER в поле fields. − keyusage_t keyUsage 18 ВАМБ.00075-02 33 01 Применение ключа (значение битов KEYUSAGE_XXX). При задании FIELD_KEYUSAGE в поле fields. − date_t notBeforePrivate Время начала действия закрытого ключа. При задании FIELD_NOTBEFOREPRIVATE в поле fields. − date_t notAfterPrivate Время окончания действия закрытого ключа. При задании FIELD_NOTAFTERPRIVATE в поле fields. − altname_t issuerAltName Альтернативное имя издателя. При задании FIELD_ISSUERALTNAME в поле fields. − altname_t subjectAltName Альтернативное имя владельца. При задании FIELD_SUBJECTALTNAME в поле fields. − string_t keyId Идентификатор ключа, соответствующего сертификату. При задании FIELD_KEYID в поле fields. − unsigned int policy_num Число политик использования. − policy_t * policies Массив политик использования. При задании FIELD_POLICY в поле fields. − unsigned int extkeyusage_num Число расширенных использований ключа. − extkeyusage_t * extKeyUsage Массив расширенных использований ключа. При задании FIELD_EXTKEYUSAGE в поле fields. − unsigned int extension_num Число расширений. − extension_t * extensions Массив расширений. При задании FIELD_EXTENSIONS в поле fields. − mem_blk_t certEncoded Сертификат в DER-кодировке. При задании FIELD_CERTENCODED в поле fields. − mem_blk_t certHash Хэш сертификата. При задании FIELD_CERTHASH в поле fields. 1.4.8 Структуры, описывающие СОС Структура revcert_t Отозванный сертификат. Состав: − string_t serialNumber Серийный номер отозванного сертификата. − date_t revtime Время отзыва сертификата. − int reason Причина отзыва сертификата - может принимать одно из следующих значений: ∙ -1 - причина отсутствует; 19 ВАМБ.00075-02 33 01 ∙ 0 - причина не указана; ∙ 1 - компрометация ключа; ∙ 2 - компрометация ключа ЦС; ∙ 3 - изменена принадлежность; ∙ 4 - сертификат заменен; ∙ 5 - действие сертификата остановлено; ∙ 6 - действие сертификата приостановлено; ∙ 8 - удаление из СОС; ∙ 9 - привилегия отозвана; ∙ 10 - компрометация ключа ЦР. Структура crl_t Структура СОС. Состав: − crlinfo_t fields Содержит побитовое ИЛИ тех и только тех констант FIELD_CRL_XXX, для которых в соответствующих им полях структуры заданы значения (например, при задании FIELD_CRL_ISSUER заполнено только поле issuer). − string_t issuer X.500 имя издателя (в виде строки DN LDAP \0). При задании FIELD_CRL_ISSUER в поле fields. − date_t lastUpdate Время начала действия СОС. При задании FIELD_CRL_LASTUPDATE в поле fields. − date_t nextUpdate Время окончания действия СОС. При задании FIELD_CRL_NEXTUPDATE в поле fields. − unsigned int number Порядковый номер СОС. При задании FIELD_CRL_NUMBER в поле fields. − unsigned int revcert_num Число отозванных сертификатов. − revcert_t * revcerts Массив отозванных сертификатов. При задании FIELD_CRL_REVOKED в поле fields. − mem_blk_t crlEncoded СОС в DER-кодировке. При задании FIELD_CRL_CRLENCODED в поле fields. − mem_blk_t crlHash Хэш СОС - в настоящее время не поддерживается. При задании FIELD_CRL_CRLHASH в поле fields. 1.4.9 Параметры выполнения функций Структура sign_param_t Параметры вычисления ЭП. Состав: − flag_t flag Флаги (могут использоваться FLAG_PKCS7, FLAG_DETACHED, FLAG_SIGN_XXX). 20 ВАМБ.00075-02 33 01 − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). Структура verify_param_t Параметры проверки ЭП. Состав: − flag_t flag Флаги (могут использоваться FLAG_PKCS7, FLAG_DETACHED, FLAG_VERIFY_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − keyusage_t keyUsage Область применения ключа ЭП (используется только при задании FLAG_VERIFY_KEYUSAGE). Сертификат(ы), на котором(ых) выполнена(ны) ЭП, будет(ут) проверяться на наличие заданной области применения. − unsigned int policy_num Количество политик использования. − policy_t * policies Массив политик использования (используется только при задании FLAG_VERIFY_POLICY). Сертификат(ы), на котором(ых) выполнена(ны) ЭП, будет(ут) проверяться на наличие заданных политик использования. − unsigned int extkeyusage_num Количество расширенных использований ключа. − extkeyusage_t * extKeyUsage Массив расширенных использований ключа (используется только при задании FLAG_VERIFY_ EXTKEYUSAGE). Сертификат(ы), на котором(ых) выполнена(ны) ЭП, будет(ут) проверяться на наличие заданных расширенных использований ключа. − int nSignToDelete Количество ЭП с конца, которые необходимо удалить (используется только при задании FLAG_VERIFY_DELSIGN). Для удаления всех ЭП следует установить равным DELETE_ALL_SIGNS. − unsigned int minsigns Минимальное количество ЭП (используется только при задании FLAG_VERIFY_MINSIGNS). − certinfo_t info Требуемая возвращаемая информация о сертификате(ах), на котором(ых) выполнена(ны) ЭП. Структура decrypt_param_t Параметры расшифрования. Состав: − flag_t flag Флаги (могут использоваться FLAG_PKCS7, FLAG_DECRYPT_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). 21 ВАМБ.00075-02 33 01 − certinfo_t info Требуемая возвращаемая информация о сертификате отправителя (только при использовании неанонимного шифрования). Структура encrypt_param_t Параметры зашифрования. Состав: − flag_t flag Флаги (могут использоваться FLAG_PKCS7, FLAG_ENCRYPT_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − unsigned int receiver_num Количество шаблонов сертификатов получателей. − certificate_t * receivers Массив шаблонов сертификатов получателей. Для каждого шаблона данного массива в локальном справочнике сертификатов выполняется поиск (если указан флаг FLAG_ENCRYPT_REMOTE, то поиск производится также в сетевом справочнике), после которого все найденные сертификаты проверяются по срокам и возможности использования ключа для шифрования. Структура find_param_t Параметры поиска сертификата(ов) по заданному шаблону. Самый быстрый поиск возможен при задании уникального идентификатора сертификата (смотри структуру certid_t) - в этом случае поиск в справочнике выполняется по уникальному ключу. Поиск сертификата(ов) без задания уникального идентификатора может быть длительным и потребовать полного перебора объектов справочника. Состав: − flag_t flag Флаги (могут использоваться FLAG_FIND_MY для поиска своего рабочего сертификата, FLAG_FIND_REMOTE для поиска в сетевом справочнике, FLAG_FIND_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − certificate_t certTemplate Шаблон сертификата для поиска (в зависимости от заданных полей шаблона производится поиск и сравнение найденных сертификатов). − certinfo_t info Требуемая возвращаемая информация о найденном(ых) сертификате(ах). Структура add_param_t Параметры добавления объекта. Состав: − flag_t flag Флаги (зарезервировано, должно быть равно ”0”). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL 22 ВАМБ.00075-02 33 01 при использовании локального СКЗИ). Структура import_param_t Параметры импортирования объекта или объектов. Состав: − flag_t flag Флаги (могут использоваться FLAG_IMPORT_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). Структура export_param_t Параметры экспорта запросов (только при использовании локального СКЗИ). Состав: − flag_t flag Флаги (могут использоваться FLAG_EXPORT_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). Структура verify_policy_param_t Параметры построения цепочки и проверки политики сертификата или СОС. Состав: − unsigned int size Размер структуры в байтах. − flag_t flag Флаги (могут использоваться FLAG_POLICY_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − date_t check_time Момент времени, используемый для проверки сертификата (если не задан, то используется текущее время). − keyusage_t keyusage Область применения ключа сертификата. Сертификат будет проверяться на наличие заданной области применения. − unsigned int eku_num Количество расширенных использований ключа. − extkeyusage_t * extkeyusages Массив расширенных использований ключа. Сертификат будет проверяться на наличие заданных расширенных использований ключа. − unsigned int policy_num Количество политик использования. − policy_t * policies Массив политик использования. Сертификат будет проверяться на наличие заданных политик использования. 23 ВАМБ.00075-02 33 01 Структура tsp_request_param_t Параметры создания запроса на получение штампа времени. Состав: − flag_t flag Флаги (могут использоваться FLAG_TSP_REQUEST_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − unsigned int index Индекс (порядковый номер, начиная с ”0”) ЭП, для которой создается запрос. Структура tsp_response_param_t Параметры вычисления ЭП запроса на получение штампа времени. Состав: − flag_t flag Флаги (могут использоваться FLAG_TSP_RESPONSE_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). Структура tsp_verify_param_t Параметры проверки ЭП запроса на получение штампа времени. Состав: − flag_t flag Флаги (могут использоваться FLAG_TSP_VERIFY_XXX). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − unsigned int index Индекс (порядковый номер, начиная с ”0”) ЭП, для которой создается запрос. − certinfo_t info Требуемая возвращаемая информация о сертификате, на котором выполнена ЭП. Структура ocsp_request_param_t Параметры создания запроса на получение статуса сертификата. Состав: − flag_t flag Флаги (зарезервировано, должно быть равно ”0”). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). Структура ocsp_response_param_t Параметры вычисления ЭП запроса на получение статуса сертификата. Состав: − flag_t flag Флаги (зарезервировано, должно быть равно ”0”). 24 ВАМБ.00075-02 33 01 − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). Структура ocsp_verify_param_t Параметры проверки ЭП запроса на получение статуса сертификата. Состав: − flag_t flag Флаги (зарезервировано, должно быть равно ”0”). − certid_t * mycert Идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ). − certinfo_t info Требуемая возвращаемая информация о сертификате, на котором выполнена ЭП. 1.4.10 Результаты выполнения функций Структура sign_status_t Результат проверки отдельной ЭП. Состав: − error_status_t status Результат проверки ЭП (VCERT_OK - в случае успеха проверки, иначе код ошибки). − date_t time Время вычисления ЭП в часовом поясе UTC (если присутствует в подписанном сообщении, иначе равно ”0”). − certificate_t * cert Указатель на сертификат, на котором была выполнена ЭП (если сертификат не найден, то значение равно NULL). Структура verify_result_t Результат проверки ЭП подписанного сообщения. Состав: − unsigned int sign_num Количество ЭП в подписанном сообщении. − sign_status_t * signs Массив результатов проверки отдельных ЭП сообщения. Структура decrypt_result_t Результат расшифрования зашифрованного сообщения. Состав: − certificate_t sender Сертификат отправителя зашифрованного сообщения (для систем с неанонимным шифрованием). Структура find_result_t Результат поиска сертификата(ов) по заданному шаблону. Состав: − unsigned int num Количество найденных сертификатов. 25 ВАМБ.00075-02 33 01 − certificate_t * certs Массив найденных сертификатов. Структура sign_info_t Информация об отдельной ЭП. Состав: − date_t time Время вычисления ЭП в часовом поясе UTC (если присутствует в подписанном сообщении, иначе равно ”0”). − certid_t * certid Уникальный идентификатор сертификата, на котором была выполнена ЭП. Структура signed_info_result_t Результат получения информации о подписанном сообщении. Состав: − flag_t type Формат подписанного сообщения (FLAG_PKCS7). − unsigned int sign_num Количество ЭП в подписанном сообщении. − sign_info_t * infos Массив информации об отдельных ЭП сообщения. Структура encrypted_info_result_t Результат получения информации о зашифрованном сообщении. Состав: − flag_t type Формат зашифрованного сообщения (FLAG_PKCS7). − unsigned int recipients_num Количество получателей зашифрованного сообщения (только для формата PKCS#7). − certid_t * recipients Массив уникальных идентификаторов сертификатов получателей (только для формата PKCS#7). − certid_t sender Уникальный идентификатор сертификата отправителя (только для систем с неанонимным шифрованием). Структура tsp_verify_result_t Результат проверки ЭП запроса на получение штампа времени. Состав: − date_t time Время вычисления ЭП штампа времени в часовом поясе UTC. − certificate_t * cert Указатель на сертификат, на котором была выполнена ЭП (если сертификат не найден, то значение равно NULL). Структура ocsp_verify_result_t Результат проверки ЭП запроса на получение статуса сертификата. Состав: 26 ВАМБ.00075-02 33 01 − int status Статус сертификата: 0 - сертификат не отозван, 1 - сертификат отозван, 2 - статус сертификата не известен. − int reason Причина отзыва сертификата (список возможных значений приведен в описании структуры revcert_t). − date_t revtime Время отзыва сертификата в часовом поясе UTC, если сертификат был отозван. − date_t thisupd Время вычисления ЭП статуса сертификата в часовом поясе UTC. − date_t nextupd Максимальное время, до которого необходимо произвести обновление статуса сертификата, в часовом поясе UTC. − certificate_t * cert Указатель на сертификат, на котором была выполнена ЭП (если сертификат не найден, то значение равно NULL). Структура pkcs7_signer_t Информация о подписанте подписанного сообщения в формате PKCS#7. Состав: − string_t digest OID используемого алгоритма хэширования (для ГОСТ Р 34.11-94 - 1.3.6.1.4.1.3670.1.1 (СКАД ”Сигнатура”) или 1.2.643.2.2.9 (CCERT PKI), для ГОСТ Р 34.11-2012 - 1.2.643.7.1.1.2.2, для FIPS 180-1 SHA-1 - 1.3.14.3.2.26). − string_t encryption OID используемого алгоритма ЭП (для ГОСТ Р 34.10-2001 - 1.3.6.1.4.1.3670.1.9 (СКАД ”Сигнатура”) или 1.2.643.2.2.19 (CCERT PKI), для ГОСТ Р 34.10-2012 - 1.2.643.7.1.1.1.1, для FIPS 186-2 RSA - 1.2.840.113549.1.1.5). − issuer_and_serial_t signer Издатель и серийный номер сертификата подписанта. − unsigned int authAttr_num Количество аутентифицированных атрибутов ЭП. − string_t * authAttrs Массив OID аутентифицированных атрибутов ЭП (например, если в списке присутствует 1.2.840.113549.1.9.5, то для данной ЭП указано время ее вычисления). − unsigned int unauthAttr_num Количество не аутентифицированных атрибутов ЭП. − string_t * unauthAttrs Массив OID не аутентифицированных атрибутов ЭП (например, если в списке присутствует 1.2.840.113549.1.9.16.2.14, то для данной ЭП указан штамп времени). Структура pkcs7_recipient_t Информация о получателе зашифрованного сообщения в формате PKCS#7. Состав: − string_t publicKey OID используемого алгоритма открытого ключа (для ГОСТ Р 34.10-2001 - 27 ВАМБ.00075-02 33 01 1.3.6.1.4.1.3670.1.11 (СКАД ”Сигнатура”) или 1.2.643.2.2.19 (CCERT PKI), для ГОСТ Р 34.102012 - 1.2.643.7.1.1.1.1, для FIPS 186-2 RSA - 1.2.840.113549.1.1.5). − issuer_and_serial_t recipient Издатель и серийный номер сертификата получателя. Структура pkcs7_info_t Результат получения информации о сообщении в формате PKCS#7. Состав: − flag_t type Тип сообщения в формате PKCS#7 (могут использоваться FLAG_PKCS7_INFO_TYPE_XXX). − unsigned int signer_num Количество подписантов подписанного сообщения в формате PKCS#7. − pkcs7_signer_t * signers Массив подписантов подписанного сообщения в формате PKCS#7. − string_t dataCipher OID используемого алгоритма шифрования данных (для ГОСТ 28147-89 - 1.3.6.1.4.1.3670.1.3 (СКАД ”Сигнатура”) или 1.2.643.2.2.21 (CCERT PKI), для FIPS 197 AES 2.16.840.1.101.3.4.1.42). − unsigned int recipient_num Количество получателей зашифрованного сообщения в формате PKCS#7. − pkcs7_recipient_t * recipients Массив получателей зашифрованного сообщения в формате PKCS#7. 1.5 Описание функций 1.5.1 Функции инициализации и деинициализации error_status_t VCERT1API VCERT_Initialize (string_t profile, flag_t flag, context_t * phCtx) Упрощенная функция инициализации контекста библиотеки Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Примечания: 1 Перед использованием любой функции библиотеки последняя должна быть проинициализирована с помощью одной из функций VCERT_Initialize() или VCERT_InitializeEx(). Ресурсы, выделенные под phCtx, должны быть освобождены с помощью функции VCERT_Uninitialize(). 2 Данная функция осуществляет поиск конфигурационного файла профилей pki1.conf в текущем каталоге вызывающего процесса. 3 Контекст библиотеки, возвращаемый данной функцией, является безопасным для параллельного (многопоточного) использования. 4 При вызове функции инициализации контекста создается кэш, находящийся в оперативной памяти, предназначенный для хранения проверенных сертификатов и СОС: − объекты (сертификаты и СОС) добавляются в кэш только после успешного завершения полной проверки цепочки этих объектов; − если при инициализации контекста не использовался флаг FLAG_INIT_NOSAVECACHE, то при освобождении этого контекста все кэшированные объекты 28 ВАМБ.00075-02 33 01 добавляются в ЛСП; − использование кэша позволяет значительно увеличить производительность как за счет избежания дополнительных проверок уже кэшированных объектов, так и за счет быстрого поиска объектов в кэше. 5 Функции инициализации и деинициализации VCERT_Initialize(), VCERT_InitializeEx() и VCERT_Uninitialize() не являются безопасными для параллельного (многопоточного) выполнения. 6 При доступе к локальному справочнику, расположенному в хранилище GDBM, следует иметь ввиду, что оно не обеспечивает синхронизации доступа, т.е. к данному конкретному локальному справочнику разрешено иметь доступ одновременно только из одного процесса, и только посредством одного контекста библиотеки. При необходимости одновременного доступа к локальному справочнику из нескольких процессов, или посредством нескольких контекстов библиотеки, следует пользоваться локальным справочником, расположенным в хранилище ODBC. Аргументы: − profile (in) имя профиля, находящееся в конфигурационном файле pki1.conf. Если в конфигурационном файле pki1.conf указан профиль по умолчанию, то значение может быть равно NULL. При использовании локального СКЗИ поддерживаются следующие дополнительные возможности: ∙ задание значения ”MY” позволяет использовать настройки профилей Справочника сертификатов и диалоговое окно выбора профиля; ∙ задание флага инициализации FLAG_INIT_REGISTRY позволяет указать требуемый профиль Справочника сертификатов по имени; − flag (in) флаги инициализации (могут быть FLAG_INIT_XXX при использовании локального СКЗИ, иначе значение должно быть равно ”0”); − phCtx (out) указатель на инициализируемый контекст. Пример 1 - Файл конфигурации профилей pki1.conf: # используемый профиль по умолчанию default : testlocal # профиль подключения к локальному СКЗИ с именем t e s t l o c a l local : testlocal # путь к Персональному справочнику сертификатов (ПСП) ps e : pse : / / s i g n e d /C: \ U s e r s \ Test1 \ l o c a l . pse # путь к Локальному справочнику сертификатов (ЛСП) l o c a l s t o r e : f i l e : / /C: \ U s e r s \ Test1 \ l o c a l . gdbm Пример 2 - Вызов упрощенной функции инициализации: context_t hCtx = NULL; error_status_t rc = 0; char szError [ 2 5 6 ] ; r c = VCERT_Initialize ( " t e s t " , 0 , &hCtx ) ; i f ( r c == 0 ) { /* какие−нибудь операции . . . */ VCERT_Uninitialize ( hCtx ) ; 29 ВАМБ.00075-02 33 01 } else f p r i n t f ( s t d e r r , " E r r o r i s %s (%08x ) " , VCERT_GetErrorText ( rc , s z E r r o r , s i z e o f ( s z E r r o r ) ) , r c ) ; error_status_t VCERT1API VCERT_InitializeEx (crypt_prov_t prov, void * param, context_t * phCtx) Расширенная функция инициализации контекста библиотеки Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Примечания: 1 Перед использованием любой функции библиотеки последняя должна быть проинициализирована с помощью одной из функций VCERT_Initialize() или VCERT_InitializeEx(). Ресурсы, выделенные под phCtx, должны быть освобождены с помощью функции VCERT_Uninitialize(). 2 Контекст библиотеки, возвращаемый данной функцией, является безопасным для параллельного (многопоточного) использования. 3 При вызове функции инициализации контекста создается кэш, находящийся в оперативной памяти, предназначенный для хранения проверенных сертификатов и СОС: − объекты (сертификаты и СОС) добавляются в кэш только после успешного завершения полной проверки цепочки этих объектов; − если при инициализации контекста не использовался флаг FLAG_INIT_NOSAVECACHE, то при освобождении этого контекста все кэшированные объекты добавляются в ЛСП; − использование кэша позволяет значительно увеличить производительность как за счет избежания дополнительных проверок уже кэшированных объектов, так и за счет быстрого поиска объектов в кэше. 4 Функции инициализации и деинициализации VCERT_Initialize(), VCERT_InitializeEx() и VCERT_Uninitialize() не являются безопасными для параллельного (многопоточного) выполнения. 5 При доступе к локальному справочнику, расположенному в хранилище GDBM, следует иметь ввиду, что оно не обеспечивает синхронизации доступа, т.е. к данному конкретному локальному справочнику разрешено иметь доступ одновременно только из одного процесса, и только посредством одного контекста библиотеки. При необходимости одновременного доступа к локальному справочнику из нескольких процессов, или посредством нескольких контекстов библиотеки, следует пользоваться локальным справочником, расположенным в хранилище ODBC. Аргументы: − prov (in) тип используемого СКЗИ (CRYPT_LOCAL); − param (in) параметры инициализации контекста (смотри структуру local_param_t); − phCtx (out) указатель на инициализируемый контекст. error_status_t VCERT1API VCERT_InitMinimal (context_t * phCtx) Функция инициализации минимального контекста библиотеки Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Примечания: 1 Перед использованием некоторых функций библиотеки последняя должна быть прои- 30 ВАМБ.00075-02 33 01 нициализирована с помощью функции VCERT_InitMinimal(). Ресурсы, выделенные под phCtx, должны быть освобождены с помощью функции VCERT_Uninitialize(). 2 Контекст библиотеки, возвращаемый данной функцией, является безопасным для параллельного (многопоточного) использования. 3 Функции инициализации и деинициализации VCERT_InitMinimal() и VCERT_Uninitialize() не являются безопасными для параллельного (многопоточного) выполнения. 4 Функция инициализации минимального контекста не осуществляет доступ к справочникам сертификатов и/или закрытому ключу. С минимальным контекстом допускается вызывать только функции, вырабатывающие хэш-значения и случайные числа, выполняющие преобразование отделенной и совмещенной ЭП, бинарных данных в/из формата Base64, получение информации о защищенных данных, и отображение окон с информацией о сертификатах и СОС. Аргументы: − phCtx (out) указатель на инициализируемый контекст. error_status_t VCERT1API VCERT_Uninitialize (context_t hCtx) Функция освобождения ресурсов контекста библиотеки Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Примечание - Данная функция выполняет освобождение ресурсов, выделенных в функции VCERT_Initialize() или VCERT_InitializeEx(). Аргументы: − hCtx (in) освобождаемый контекст. Пример 3 - Вызов расширенной функции инициализации: local_param_t LocalParam = { 0 } ; context_t hCtx = NULL; error_status_t rc = 0; char szError [ 2 5 6 ] ; LocalParam . s i z e = s i z e o f ( local_param_t ) ; LocalParam . pse = " pse : / / s i g n e d /C: \ U s e r s \ Test1 \ l o c a l . pse " ; LocalParam . l o c a l s t o r e = " f i l e : / /C: \ U s e r s \ Test1 \ l o c a l . gdbm " ; LocalParam . ldap = " ldap : / / ldap . x509 . ru / cn=Users , dc=x509 , dc=ru " ; r c = VCERT_InitializeEx (CRYPT_LOCAL, &LocalParam , &hCtx ) ; i f ( r c == 0 ) { /* какие−нибудь операции . . . */ VCERT_Uninitialize ( hCtx ) ; } else f p r i n t f ( s t d e r r , " E r r o r i s %s (%08x ) " , VCERT_GetErrorText ( rc , s z E r r o r , s i z e o f ( s z E r r o r ) ) , r c ) ; 1.5.2 Функции работы с блоками памяти (блочные функции) error_status_t VCERT1API VCERT_HashMem (context_t hCtx, mem_blk_t * data, mem_blk_t * hash) Функция хэширования блока данных Возвращаемые значения: 31 ВАМБ.00075-02 33 01 VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − data (in) хэшируемый блок данных; − hash (out) буфер для хэш - функции блока данных. error_status_t VCERT1API VCERT_SignMem (context_t hCtx, sign_param_t * pSignPara, mem_blk_t * data, mem_blk_t * sign_in, mem_blk_t * sign_out) Функция вычисления ЭП блока данных Примечание - Вычисление ЭП возможно, только если в рабочем сертификате установлен бит использования ключа KEYUSAGE_DIGITAL_SIGNATURE (то есть сертификат можно использовать для выполнения ЭП). Данные всегда подаются в блоке данных data, в том числе и при вычислении первой ЭП в присоединенном формате. Если при вызове заполнена структура sign_in, то выполняется добавление ЭП к уже существующим. Результат выдается в sign_out. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − data (in) указатель на блок данных, в случае вычисления первой присоединенной ЭП или отсоединенной ЭП; − sign_in (in) блок с существующими ЭП (в случае добавления ЭП); − sign_out (out) результат вычисления ЭП. Пример 4 - Вычисление присоединенной ЭП в PKCS#7 формате: u n s i g n e d c har * t e x t = ( u n s i g n e d char *) " data t o s i g n " ; mem_blk_t data = { s i z e o f ( t e x t ) , t e x t } ; mem_blk_t s i g n = { 0 } ; sign_param_t SignParam = { 0 } ; error_status_t rc = 0; certid_t CertId = {0}; C e r t I d . type = ID_KEYID ; C e r t I d . i d . keyId = " 0 0 0 1 2 2 2 2 2 2 0 1 " ; SignParam . f l a g = FLAG_PKCS7; SignParam . mycert = &C e r t I d ; r c = VCERT_SignMem ( g_hCtx , &SignParam , &data , NULL, &s i g n ) ; error_status_t VCERT1API VCERT_VerifyMem (context_t hCtx, verify_param_t * pVerifyPara, mem_blk_t * data, mem_blk_t * sign_in, mem_blk_t * sign_out, verify_result_t * pVerifyResult) Функция проверки ЭП блока данных Примечание - При проверке ЭП по умолчанию не используется дата отзыва сертификата, на котором была выполнена ЭП, в СОС. Для проверки ЭП в доверенных архивах с использованием даты отзыва сертификата необходимо использовать флаг FLAG_VERIFY_- 32 ВАМБ.00075-02 33 01 USEREVTIME. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − data (in) указатель на блок данных, в случае проверки отсоединенной ЭП; − sign_in (in) блок с существующими ЭП для проверки; − sign_out (out) блок с оставшимися ЭП, в случае удаления ЭП; − pVerifyResult (out) результат проверки ЭП. Пример 5 - Вычисление и проверка отсоединенной ЭП в PKCS#7 формате с расширенным использованием ключа: u n s i g n e d c har * t e x t = ( u n s i g n e d char *) " data t o s i g n " ; mem_blk_t data = { s i z e o f ( t e x t ) , t e x t } ; mem_blk_t s i g n = { 0 } ; sign_param_t SignParam = { 0 } ; error_status_t rc = 0; extkeyusage_t Eku = { " 1 . 3 . 6 . 1 . 4 . 1 . 1 0 2 4 4 . 4 . 2 . 1 " } ; verify_param_t VerifyParam = { 0 } ; verify_result_t VerifyResult = {0}; error_status_t rc = 0; certid_t CertId = {0}; char szError [ 2 5 6 ] ; C e r t I d . type = ID_KEYID ; C e r t I d . i d . keyId = " 0 0 0 1 2 2 2 2 2 2 0 1 " ; SignParam . f l a g = FLAG_PKCS7 | FLAG_DETACHED; SignParam . mycert = &C e r t I d ; VerifyParam . f l a g = FLAG_PKCS7 | FLAG_DETACHED | FLAG_VERIFY_EXTKEYUSAGE; VerifyParam . mycert = &C e r t I d ; VerifyParam . extkeyusage_num = 1 ; VerifyParam . extKeyUsage = &Eku ; VerifyParam . i n f o = FIELD_SUBJECT ; r c = VCERT_SignMem ( g_hCtx , &SignParam , &data , NULL, &s i g n ) ; /* необходимо добавить обработку ошибок . . . */ r c = VCERT_VerifyMem( g_hCtx , &VerifyParam , &data , &s i g n , NULL, &V e r i f y R e s u l t ) ; /* необходимо добавить обработку ошибок . . . */ f o r ( i n t i = 0 ; i < V e r i f y R e s u l t . sign_num ; i ++) 33 ВАМБ.00075-02 33 01 { p r i n t f ( " S i g n a t u r e %d : %s a t %s by %s \n " , i +1, VCERT_GetErrorText ( V e r i f y R e s u l t . s i g n s [ i ] . s t a t u s , szError , s i z e o f ( szError ) ) , c time (& V e r i f y R e s u l t . s i g n s [ i ] . time ) , VerifyResult . signs [ i ] . cert . subject ) ; } VCERT_FreeMem( g_hCtx , s i g n −>buf ) ; VCERT_FreeVerifyResult ( g_hCtx , &V e r i f y R e s u l t ) ; error_status_t VCERT1API VCERT_VerifyAndSignMem (context_t hCtx, verify_param_t * pVerifyPara, sign_param_t * pSignPara, mem_blk_t * data, mem_blk_t * sign_in, mem_blk_t * sign_out, verify_result_t * pVerifyResult) Функция проверки и добавления ЭП блока данных в случае успеха проверки Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − pSignPara (in) параметры вычисления ЭП; − data (in) блок данных, в случае проверки и вычисления отсоединенной ЭП; − sign_in (in) блок с существующими ЭП для проверки; − sign_out (out) блок с существующими и вновь вычисленной ЭП; − pVerifyResult (out) результат проверки ЭП. Пример 6 - Проверка ЭП и проверка наличия как минимум двух ЭП в присоединенном формате с последующим их удалением и добавлением собственной ЭП: mem_blk_t s i g n = { pbSign , cbSign } ; /* блок данных c двумя ЭП */ mem_blk_t out = { 0 } ; sign_param_t SignParam = { 0 } ; extkeyusage_t Eku = { " 1 . 3 . 6 . 1 . 4 . 1 . 1 0 2 4 4 . 4 . 2 . 5 " } ; verify_param_t VerifyParam = { 0 } ; verify_result_t VerifyResult = {0}; error_status_t rc = 0; char szError [ 2 5 6 ] ; certid_t CertId1 = {0}; certid_t CertId2 = {0}; C e r t I d 1 . type = C e r t I d 2 . type = ID_KEYID ; C e r t I d 1 . i d . keyId = " 0 0 0 1 2 2 2 2 2 2 0 1 " ; C e r t I d 2 . i d . keyId = " 0 0 0 5 2 2 2 2 2 2 0 1 " ; SignParam . f l a g = FLAG_PKCS7; SignParam . mycert = &C e r t I d 1 ; 34 ВАМБ.00075-02 33 01 VerifyParam . f l a g = FLAG_VERIFY_EXTKEYUSAGE | FLAG_VERIFY_DELSIGN | FLAG_VERIFY_MINSIGNS; VerifyParam . mycert = &C e r t I d 2 ; VerifyParam . extkeyusage_num = 1 ; VerifyParam . extKeyUsage = &Eku ; VerifyParam . i n f o = FIELD_SUBJECT | FIELD_KEYID ; VerifyParam . m i n s i g n s = 2 ; VerifyParam . nSignToDelete = −1; r c = VCERT_VerifyAndSignMem ( g_hCtx , &VerifyParam , &SignParam , NULL, &s i g n , &out , &V e r i f y R e s u l t ) ; /* необходимо добавить обработку ошибок . . . */ f o r ( i n t i = 0 ; i < V e r i f y R e s u l t . sign_num ; i ++) { p r i n t f ( " S i g n a t u r e %d : %s a t %s by %s (%s ) \ n " , i +1, VCERT_GetErrorText ( V e r i f y R e s u l t . s i g n s [ i ] . s t a t u s , szError , s i z e o f ( szError ) ) , c time (& V e r i f y R e s u l t . s i g n s [ i ] . time ) , VerifyResult . signs [ i ] . cert . subject , V e r i f y R e s u l t . s i g n s [ i ] . c e r t . keyId ) ; } VCERT_FreeVerifyResult ( g_hCtx , &V e r i f y R e s u l t ) ; VCERT_FreeMem( g_hCtx , out−>buf ) ; error_status_t VCERT1API VCERT_SignedInfoMem (context_t hCtx, mem_blk_t * sign, signed_info_result_t * pSignInfo) Функция получения информации об ЭП блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − sign_in (in) блок с существующими ЭП; − pSignInfo (out) информация об ЭП блока данных. error_status_t VCERT1API VCERT_EncryptMem (context_t hCtx, encrypt_param_t * pEncryptPara, mem_blk_t * in, mem_blk_t * out) Функция зашифрования блока данных Примечания: 1 Выполнение зашифрования возможно, только если в сертификатах отправителя (рабочем сертификате) и получателей установлен хотя-бы один из битов использования ключа KEYUSAGE_DATA_ENCIPHERMENT, KEYUSAGE_KEY_ENCIPHERMENT или KEYUSAGE_KEY_AGREEMENT - то есть, если эти сертификаты разрешено использовать для выполнения шифрования. 2 Следует иметь ввиду, что данная функция не обеспечивает контроль целостности зашифрованных данных и аутентификацию источника данных. В случае необходимости контроля целостности данных и аутентификации их источника следует использовать функцию зашифрования блока данных после вычисления ЭП этого блока. 35 ВАМБ.00075-02 33 01 Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptPara (in) параметры выполнения зашифрования; − in (in) блок с открытыми данными; − out (out) блок с шифрованными данными. error_status_t VCERT1API VCERT_DecryptMem (context_t hCtx, decrypt_param_t * pDecryptPara, mem_blk_t * in, mem_blk_t * out, decrypt_result_t * pDecryptResult) Функция расшифрования блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − in (in) блок с шифрованными данными; − out (out) блок с открытыми данными; − pDecryptResult (out) результат расшифрования, содержащий сертификат отправителя зашифрованного сообщения (только для систем с неанонимным шифрованием). Пример 7 - Шифрование на все сертификаты с заданным в альтернативном имени адресом эл. почты с последующим расшифрованием: u n s i g n e d c har * t e x t = ( u n s i g n e d char *) " data t o s e a l " ; mem_blk_t i n = { t e x t , s i z e o f ( t e x t ) } ; mem_blk_t enc = { 0 } ; mem_blk_t out = { 0 } ; encrypt_param_t EncryptParam = { 0 } ; decrypt_param_t DecryptParam = { 0 } ; decrypt_result_t DecryptResult = {0}; error_status_t rc = 0; char szError [ 2 5 6 ] ; certid_t CertId1 = {0}; certid_t CertId2 = {0}; c e r t i f i c a t e _ t Receiver = {0}; C e r t I d 1 . type = C e r t I d 2 . type = ID_KEYID ; C e r t I d 1 . i d . keyId = " 0 0 0 1 2 2 2 2 2 2 0 1 " ; C e r t I d 2 . i d . keyId = " 0 0 0 5 2 2 2 2 2 2 0 1 " ; R e c e i v e r . f i e l d s = FIELD_SUBJECTALTNAME; R e c e i v e r . subjectAltName . e m a i l A d d r e s s = " ivanov@x509 . ru " ; EncryptParam . f l a g = FLAG_PKCS7; EncryptParam . mycert = &C e r t I d 1 ; EncryptParam . receiver_num = 1 ; EncryptParam . r e c e i v e r s = &R e c e i v e r ; 36 ВАМБ.00075-02 33 01 DecryptParam . mycert = &C e r t I d 2 ; DecryptParam . i n f o = FIELD_SUBJECT | FIELD_KEYID ; r c = VCERT_EncryptMem( g_hCtx , &EncryptParam , &in , &enc ) ; /* необходимо добавить обработку ошибок . . . */ r c = VCERT_DecryptMem( g_hCtx , &DecryptParam , &enc , &out , &D e c r y p t R e s u l t ) ; /* необходимо добавить обработку ошибок . . . */ p r i n t f ( " R e s u l t i s %s (%08x ) ; Sender i s %s (%s ) \ n " , VCERT_GetErrorText ( rc , s z E r r o r , s i z e o f ( s z E r r o r ) ) , rc , D e c r y p t R e s u l t . s e n d e r . s u b j e c t , D e c r y p t R e s u l t . s e n d e r . keyId ) ; VCERT_FreeDecryptResult ( g_hCtx , &D e c r y p t R e s u l t ) ; VCERT_FreeMem( g_hCtx , enc−>buf ) ; VCERT_FreeMem( g_hCtx , out−>buf ) ; error_status_t VCERT1API VCERT_EncryptedInfoMem (context_t hCtx, mem_blk_t * encrypted, encrypted_info_result_t * pEncryptedInfo) Функция получения информации о зашифрованном блоке данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − encrypted (in) блок с шифрованными данными; − pEncryptedInfo (out) информация о блоке с шифрованными данными. error_status_t VCERT1API VCERT_SignAndEncryptMem (context_t hCtx, sign_param_t * pSignPara, encrypt_param_t * pEncryptPara, mem_blk_t * in, mem_blk_t * out) Функция вычисления ЭП и шифрования блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − pEncryptPara (in) параметры выполнения зашифрования; − in (in) блок с открытыми данными; − out (out) блок с подписанными и зашифрованными данными. error_status_t VCERT1API VCERT_DecryptAndVerifyMem (context_t hCtx, decrypt_param_t * pDecryptPara, verify_param_t * pVerifyPara, mem_blk_t * in, mem_blk_t * out, decrypt_result_t * pDecryptResult, verify_result_t * pVerifyResult) Функция выполнения расшифрования и проверки ЭП блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: 37 ВАМБ.00075-02 33 01 − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − pVerifyPara (in) параметры проверки ЭП; − in (in) блок с подписанными и зашифрованными данными; − out (out) блок с открытыми данными; − pDecryptResult (out) результат расшифрования, содержащий сертификат отправителя зашифрованного сообщения (только для систем с неанонимным шифрованием); − pVerifyResult (out) результат проверки ЭП. 1.5.3 Функции работы с блоками памяти (потоковые функции) error_status_t VCERT1API VCERT_StrHashInitMem (context_t hCtx, string_t algorithm, strhash_t * hStr) Функция инициализации потокового хэширования блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки (в этом случае контекст выполнения потоковой операции не создается). Аргументы: − hCtx (in) контекст библиотеки; − algorithm (in) объектный идентификатор (OID) алгоритма хэширования (для ГОСТ Р 34.11-94 - 1.3.6.1.4.1.3670.1.1 (СКАД ”Сигнатура”) или 1.2.643.2.2.9 (CCERT PKI), для ГОСТ Р 34.11-2012 - 1.2.643.7.1.1.2.2); − hStr (out) контекст выполнения потоковой операции. error_status_t VCERT1API VCERT_StrHashUpdateMem (context_t hCtx, strhash_t * hStr, mem_blk_t * data) Функция продолжения потокового хэширования блока данных Примечание - В случае, если данная функция завершается с ошибкой, контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − hStr (in) контекст выполнения потоковой операции; − data (in) указатель на блок данных. error_status_t VCERT1API VCERT_StrHashFinalMem (context_t hCtx, strhash_t * hStr, mem_blk_t * hash) Функция финализации потокового хэширования блока данных Примечание - По завершении данной функции контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − hStr (in) контекст выполнения потоковой операции; 38 ВАМБ.00075-02 33 01 − hash (out) буфер для хэш - функции блока данных. error_status_t VCERT1API VCERT_StrSignInitMem (context_t hCtx, sign_param_t * pSignPara, mem_blk_t * sign_in, strsign_t * hStr) Функция инициализации выполнения потоковой ЭП блока данных Примечания: 1 Вычисление ЭП возможно, только если в рабочем сертификате установлен бит использования ключа KEYUSAGE_DIGITAL_SIGNATURE (то есть сертификат можно использовать для выполнения ЭП). 2 Данная функция поддерживает вычисление отсоединенной(ых) ЭП только в формате PKCS#7, соответственно, при заполнении параметра pSignPara необходимо указывать флаги FLAG_DETACHED и FLAG_PKCS7. Если при вызове заполнена структура sign_in, то выполняется добавление ЭП к уже существующим. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки (в этом случае контекст выполнения потоковой операции не создается). Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − sign_in (in) блок с существующими ЭП (в случае добавления ЭП); − hStr (out) контекст выполнения потоковой операции. error_status_t VCERT1API VCERT_StrSignUpdateMem (context_t hCtx, sign_param_t * pSignPara, strsign_t * hStr, mem_blk_t * data) Функция продолжения выполнения потоковой ЭП блока данных Примечания: 1 В качестве pSignPara необходимо использовать те же параметры вычисления ЭП, которые использовались при создании контекста выполнения потоковой операции. 2 В случае, если данная функция завершается с ошибкой, контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − hStr (in) контекст выполнения потоковой операции; − data (in) указатель на блок данных. error_status_t VCERT1API VCERT_StrSignFinalMem (context_t hCtx, sign_param_t * pSignPara, strsign_t * hStr, mem_blk_t * sign_out) Функция финализации выполнения потоковой ЭП блока данных Примечания: 1 В качестве pSignPara необходимо использовать те же параметры вычисления ЭП, которые использовались при создании контекста выполнения потоковой операции. 2 По завершении данной функции контекст выполнения потоковой операции освобождается и не может быть повторно использован. 3 Результат выполнения данной функции по формату подписанных данных совместим с 39 ВАМБ.00075-02 33 01 результатом выполнения функции VCERT_SignMem(), при условии использования последней для вычисления отсоединенной(ых) ЭП в формате PKCS#7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − hStr (in) контекст выполнения потоковой операции; − sign_out (out) результат вычисления ЭП. error_status_t VCERT1API VCERT_StrVerifyInitMem (context_t hCtx, verify_param_t * pVerifyPara, mem_blk_t * sign_in, strverify_t * hStr) Функция инициализации проверки потоковой ЭП блока данных Примечания: 1 При проверке ЭП по умолчанию не используется дата отзыва сертификата, на котором была выполнена ЭП, в СОС. Для проверки ЭП в доверенных архивах с использованием даты отзыва сертификата необходимо использовать флаг FLAG_VERIFY_USEREVTIME. 2 Данная функция поддерживает проверку отсоединенной(ых) ЭП только в формате PKCS#7, соответственно, при заполнении параметра pVerifyPara необходимо указывать флаги FLAG_DETACHED и FLAG_PKCS7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − sign_in (in) блок с существующими ЭП для проверки; − hStr (out) контекст выполнения потоковой операции. error_status_t VCERT1API VCERT_StrVerifyUpdateMem (context_t hCtx, verify_param_t * pVerifyPara, strverify_t * hStr, mem_blk_t * data) Функция продолжения проверки потоковой ЭП блока данных Примечания: 1 В качестве pVerifyPara необходимо использовать те же параметры проверки ЭП, которые использовались при создании контекста выполнения потоковой операции. 2 В случае, если данная функция завершается с ошибкой, контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − hStr (in) контекст выполнения потоковой операции; − data (in) указатель на блок данных. error_status_t VCERT1API VCERT_StrVerifyFinalMem (context_t hCtx, verify_param_t * pVerifyPara, strverify_t * hStr, mem_blk_t * sign_out, verify_result_t * pVerifyResult) 40 ВАМБ.00075-02 33 01 Функция финализации проверки потоковой ЭП блока данных Примечания: 1 В качестве pVerifyPara необходимо использовать те же параметры проверки ЭП, которые использовались при создании контекста выполнения потоковой операции. 2 По завершении данной функции контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − hStr (in) контекст выполнения потоковой операции; − sign_out (out) блок с оставшимися ЭП, в случае удаления ЭП; − pVerifyResult (out) результат проверки ЭП. error_status_t VCERT1API VCERT_StrEncryptInitMem (context_t hCtx, encrypt_param_t * pEncryptPara, strencrypt_t * hStr) Функция инициализации анонимного потокового зашифрования блока данных Примечания: 1 Выполнение зашифрования возможно, только если в сертификатах отправителя (рабочем сертификате) и получателей установлен хотя-бы один из битов использования ключа KEYUSAGE_DATA_ENCIPHERMENT, KEYUSAGE_KEY_ENCIPHERMENT или KEYUSAGE_KEY_AGREEMENT - то есть, если эти сертификаты разрешено использовать для выполнения шифрования. 2 Следует иметь ввиду, что данная функция не обеспечивает контроль целостности зашифрованных данных и аутентификацию источника данных. В случае необходимости контроля целостности данных и аутентификации их источника следует использовать функцию зашифрования файла после вычисления ЭП этого файла. 3 Данная функция поддерживает зашифрование данных в формате PKCS#7, соответственно, при заполнении параметра pEncryptPara необходимо указывать флаг FLAG_PKCS7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptPara (in) параметры выполнения зашифрования; − hStr (out) контекст выполнения потоковой операции. error_status_t VCERT1API VCERT_StrEncryptUpdateMem (context_t hCtx, encrypt_param_t * pEncryptPara, strencrypt_t * hStr, mem_blk_t * in, mem_blk_t * out) Функция продолжения анонимного потокового зашифрования блока данных Примечания: 1 В качестве pEncryptPara необходимо использовать те же параметры выполнения зашифрования, которые использовались при создании контекста выполнения потоковой операции. 2 В случае, если данная функция завершается с ошибкой, контекст выполнения потоковой 41 ВАМБ.00075-02 33 01 операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptPara (in) параметры выполнения зашифрования; − hStr (in) контекст выполнения потоковой операции; − in (in) блок с открытыми данными; − out (out) блок с шифрованными данными. error_status_t VCERT1API VCERT_StrEncryptFinalMem (context_t hCtx, encrypt_param_t * pEncryptPara, strencrypt_t * hStr, mem_blk_t * out) Функция финализации анонимного потокового зашифрования блока данных Примечания: 1 В качестве pEncryptPara необходимо использовать те же параметры выполнения зашифрования, которые использовались при создании контекста выполнения потоковой операции. 2 По завершении данной функции контекст выполнения потоковой операции освобождается и не может быть повторно использован. 3 Результат выполнения данной функции по формату зашифрованных данных совместим с результатом выполнения функции VCERT_EncryptMem(), при условии использования последней для зашифрования данных в формате PKCS#7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptPara (in) параметры выполнения зашифрования; − hStr (in) контекст выполнения потоковой операции; − out (out) блок с шифрованными данными. error_status_t VCERT1API VCERT_StrDecryptInitMem (context_t hCtx, decrypt_param_t * pDecryptPara, mem_blk_t * pkcs7, uint32_t * left, strdecrypt_t * hStr) Функция инициализации анонимного потокового расшифрования блока данных Примечание - Данная функция поддерживает расшифрование данных в формате PKCS#7, соответственно, при заполнении параметра pDecryptPara необходимо указывать флаг FLAG_PKCS7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_DECRYPT_FORMAT в случае, если блок с шифрованными данными не содержит достаточно информации для раскодирования формата PKCS#7. При получении этого кода ошибки следует увеличить размер подаваемого блока с шифрованными данными и повторно вызвать функцию VCERT_StrDecryptInitMem(). Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − pkcs7 (in) блок с шифрованными данными; 42 ВАМБ.00075-02 33 01 − left (out) длина необработанных данных. Поскольку обработка данных производится блоками, то последний блок, присутствующий только частично, обработан не будет; − hStr (out) контекст выполнения потоковой операции. error_status_t VCERT1API VCERT_StrDecryptUpdateMem (context_t hCtx, decrypt_param_t * pDecryptPara, strdecrypt_t * hStr, mem_blk_t * in, uint32_t * left, mem_blk_t * out) Функция продолжения анонимного потокового расшифрования блока данных Примечания: 1 В качестве pDecryptPara необходимо использовать те же параметры выполнения расшифрования, которые использовались при создании контекста выполнения потоковой операции. 2 В случае, если данная функция завершается с ошибкой, контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − hStr (in) контекст выполнения потоковой операции; − in (in) блок с шифрованными данными; − left (out) длина необработанных данных. Поскольку обработка данных производится блоками, то последний блок, присутствующий только частично, обработан не будет; − out (out) блок с открытыми данными. error_status_t VCERT1API VCERT_StrDecryptFinalMem (context_t hCtx, decrypt_param_t * pDecryptPara, strdecrypt_t * hStr, decrypt_result_t * pDecryptResult) Функция финализации анонимного потокового расшифрования блока данных Примечания: 1 В качестве pDecryptPara необходимо использовать те же параметры выполнения расшифрования, которые использовались при создании контекста выполнения потоковой операции. 2 По завершении данной функции контекст выполнения потоковой операции освобождается и не может быть повторно использован. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − hStr (in) контекст выполнения потоковой операции; − pDecryptResult (out) результат расшифрования, содержащий сертификат отправителя зашифрованного сообщения (только для систем с неанонимным шифрованием). error_status_t VCERT1API VCERT_StrEncryptedInfoMem (context_t hCtx, mem_blk_t * encrypted, encrypted_info_result_t * pEncryptedInfo) Функция потокового получения информации о зашифрованном блоке данных Возвращаемые значения: 43 ВАМБ.00075-02 33 01 VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_DECRYPT_FORMAT в случае, если блок с шифрованными данными не содержит достаточно информации для раскодирования формата PKCS#7. При получении этого кода ошибки следует увеличить размер подаваемого блока с шифрованными данными и повторно вызвать функцию VCERT_StrEncryptedInfoMem(). Аргументы: − hCtx (in) контекст библиотеки; − encrypted (in) блок с шифрованными данными; − pEncryptedInfo (out) информация о блоке с шифрованными данными. 1.5.4 Функции работы с файлами (блочные функции) error_status_t VCERT1API VCERT_HashFile (context_t hCtx, char * data, mem_blk_t * hash) Функция хэширования файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − data (in) хэшируемый файл; − hash (out) буфер для хэш - функции файла. error_status_t VCERT1API VCERT_SignFile (context_t hCtx, sign_param_t * pSignPara, char * data, char * sign_in, char * sign_out) Функция вычисления ЭП файла Примечание - Вычисление ЭП возможно, только если в рабочем сертификате установлен бит использования ключа KEYUSAGE_DIGITAL_SIGNATURE (то есть сертификат можно использовать для выполнения ЭП). Данные всегда подаются в файле data, в том числе и при вычислении первой ЭП в присоединенном формате. Если при вызове указан файл sign_in, то выполняется добавление ЭП к уже существующим. Результат выдается в sign_out. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − data (in) указатель на файл с данными, в случае вычисления первой присоединенной ЭП или отсоединенной ЭП; − sign_in (in) файл с существующими ЭП (в случае добавления ЭП); − sign_out (out) результат вычисления ЭП. error_status_t VCERT1API VCERT_VerifyFile (context_t hCtx, verify_param_t * pVerifyPara, char * data, char * sign_in, char * sign_out, verify_result_t * pVerifyResult) Функция проверки ЭП файла Примечание - При проверке ЭП по умолчанию не используется дата отзыва сертификата, на котором была выполнена ЭП, в СОС. Для проверки ЭП в доверенных архивах с использованием даты отзыва сертификата необходимо использовать флаг FLAG_VERIFY_- 44 ВАМБ.00075-02 33 01 USEREVTIME. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − data (in) указатель на файл с данными, в случае проверки отсоединенной ЭП; − sign_in (in) файл с существующими ЭП для проверки; − sign_out (out) файл с оставшимися ЭП, в случае удаления ЭП; − pVerifyResult (out) результат проверки ЭП. error_status_t VCERT1API VCERT_VerifyAndSignFile (context_t hCtx, verify_param_t * pVerifyPara, sign_param_t * pSignPara, char * data, char * sign_in, char * sign_out, verify_result_t * pVerifyResult) Функция проверки и добавления ЭП файла в случае успеха проверки Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − pSignPara (in) параметры вычисления ЭП; − data (in) файл с данными, в случае проверки и вычисления отсоединенной ЭП; − sign_in (in) файл с существующими ЭП для проверки; − sign_out (out) файл с существующими и вновь вычисленной ЭП; − pVerifyResult (out) результат проверки ЭП. error_status_t VCERT1API VCERT_SignedInfoFile (context_t hCtx, char * sign, signed_info_result_t * pSignInfo) Функция получения информации об ЭП файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − sign_in (in) файл с существующими ЭП; − pSignInfo (out) информация об ЭП файла. error_status_t VCERT1API VCERT_EncryptFile (context_t hCtx, encrypt_param_t * pEncryptPara, char * in, char * out) Функция зашифрования файла Примечания: 1 Выполнение зашифрования возможно, только если в сертификатах отправителя 45 ВАМБ.00075-02 33 01 (рабочем сертификате) и получателей установлен хотя-бы один из битов использования ключа KEYUSAGE_DATA_ENCIPHERMENT, KEYUSAGE_KEY_ENCIPHERMENT или KEYUSAGE_KEY_AGREEMENT - то есть, если эти сертификаты разрешено использовать для выполнения шифрования. 2 Следует иметь ввиду, что данная функция не обеспечивает контроль целостности зашифрованных данных и аутентификацию источника данных. В случае необходимости контроля целостности данных и аутентификации их источника следует использовать функцию зашифрования файла после вычисления ЭП этого файла. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptPara (in) параметры выполнения зашифрования; − in (in) файл с открытыми данными; − out (out) файл с шифрованными данными. error_status_t VCERT1API VCERT_DecryptFile (context_t hCtx, decrypt_param_t * pDecryptPara, char * in, char * out, decrypt_result_t * pDecryptResult) Функция расшифрования файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − in (in) файл с шифрованными данными; − out (out) файл с открытыми данными; − pDecryptResult (out) результат расшифрования, содержащий сертификат отправителя зашифрованного сообщения (только для систем с неанонимным шифрованием). error_status_t VCERT1API VCERT_EncryptedInfoFile encrypted, encrypted_info_result_t * pEncryptedInfo) Функция получения информации о зашифрованном файле Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: (context_t hCtx, char * − hCtx (in) контекст библиотеки; − encrypted (in) файл с шифрованными данными; − pEncryptedInfo (out) информация о файле с шифрованными данными. error_status_t VCERT1API VCERT_SignAndEncryptFile (context_t hCtx, sign_param_t * pSignPara, encrypt_param_t * pEncryptPara, char * in, char * out) Функция вычисления ЭП и шифрования файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; 46 ВАМБ.00075-02 33 01 − pSignPara (in) параметры вычисления ЭП; − pEncryptPara (in) параметры выполнения зашифрования; − in (in) файл с открытыми данными; − out (out) файл с подписанными и зашифрованными данными. error_status_t VCERT1API VCERT_DecryptAndVerifyFile (context_t hCtx, decrypt_param_t * pDecryptPara, verify_param_t * pVerifyPara, char * in, char * out, decrypt_result_t * pDecryptResult, verify_result_t * pVerifyResult) Функция выполнения расшифрования и проверки ЭП файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − pVerifyPara (in) параметры проверки ЭП; − in (in) файл с подписанными и зашифрованными данными; − out (out) файл с открытыми данными; − pDecryptResult (out) результат расшифрования, содержащий сертификат отправителя зашифрованного сообщения (только для систем с неанонимным шифрованием); − pVerifyResult (out) результат проверки ЭП. 1.5.5 Функции работы с файлами (потоковые функции) error_status_t VCERT1API VCERT_StrHashFile (context_t hCtx, string_t algorithm, char * data, mem_blk_t * hash) Функция потокового хэширования файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − algorithm (in) объектный идентификатор (OID) алгоритма хэширования (для ГОСТ Р 34.11-94 - 1.3.6.1.4.1.3670.1.1 (СКАД ”Сигнатура”) или 1.2.643.2.2.9 (CCERT PKI), для ГОСТ Р 34.11-2012 - 1.2.643.7.1.1.2.2); − data (in) хэшируемый файл; − hash (out) буфер для хэш - функции файла. error_status_t VCERT1API VCERT_StrSignFile (context_t hCtx, sign_param_t * pSignPara, char * data, char * sign_in, char * sign_out) Функция потокового вычисления ЭП файла Примечания: 1 Вычисление ЭП возможно, только если в рабочем сертификате установлен бит использования ключа KEYUSAGE_DIGITAL_SIGNATURE (то есть сертификат можно использовать для выполнения ЭП). 2 Данная функция поддерживает вычисление отсоединенной(ых) ЭП только в формате PKCS#7, соответственно, при заполнении параметра pSignPara необходимо указывать фла- 47 ВАМБ.00075-02 33 01 ги FLAG_DETACHED и FLAG_PKCS7. 3 Результат выполнения данной функции по формату подписанных данных совместим с результатом выполнения функции VCERT_SignFile(), при условии использования последней для вычисления отсоединенной(ых) ЭП в формате PKCS#7. Данные всегда подаются в файле data. Если при вызове указан файл sign_in, то выполняется добавление ЭП к уже существующим. Результат выдается в sign_out. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pSignPara (in) параметры вычисления ЭП; − data (in) указатель на файл с данными; − sign_in (in) файл с существующими ЭП (в случае добавления ЭП); − sign_out (out) результат вычисления ЭП. error_status_t VCERT1API VCERT_StrVerifyFile (context_t hCtx, verify_param_t * pVerifyPara, char * data, char * sign_in, char * sign_out, verify_result_t * pVerifyResult) Функция потоковой проверки ЭП файла Примечания: 1 При проверке ЭП по умолчанию не используется дата отзыва сертификата, на котором была выполнена ЭП, в СОС. Для проверки ЭП в доверенных архивах с использованием даты отзыва сертификата необходимо использовать флаг FLAG_VERIFY_USEREVTIME. 2 Данная функция поддерживает проверку отсоединенной(ых) ЭП только в формате PKCS#7, соответственно, при заполнении параметра pVerifyPara необходимо указывать флаги FLAG_DETACHED и FLAG_PKCS7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. VCERT_E_VERIFY в случае ошибки проверки хотя бы одной ЭП (для обработки результатов проверки необходимо анализировать pVerifyResult). Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП; − data (in) указатель на файл с данными; − sign_in (in) файл с существующими ЭП для проверки; − sign_out (out) файл с оставшимися ЭП, в случае удаления ЭП; − pVerifyResult (out) результат проверки ЭП. error_status_t VCERT1API VCERT_StrEncryptFile (context_t hCtx, encrypt_param_t * pEncryptPara, char * in, char * out) Функция анонимного потокового зашифрования файла Примечания: 1 Выполнение зашифрования возможно, только если в сертификатах отправителя (рабочем сертификате) и получателей установлен хотя-бы один из битов использования ключа KEYUSAGE_DATA_ENCIPHERMENT, KEYUSAGE_KEY_ENCIPHERMENT или KEYUSAGE_KEY_AGREEMENT - то есть, если эти сертификаты разрешено использовать для выполнения шифрования. 48 ВАМБ.00075-02 33 01 2 Следует иметь ввиду, что данная функция не обеспечивает контроль целостности зашифрованных данных и аутентификацию источника данных. В случае необходимости контроля целостности данных и аутентификации их источника следует использовать функцию зашифрования файла после вычисления ЭП этого файла. 3 Данная функция поддерживает зашифрование данных в формате PKCS#7, соответственно, при заполнении параметра pEncryptPara необходимо указывать флаг FLAG_PKCS7. 4 Результат выполнения данной функции по формату зашифрованных данных совместим с результатом выполнения функции VCERT_EncryptFile(), при условии использования последней для зашифрования данных в формате PKCS#7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptPara (in) параметры выполнения зашифрования; − in (in) файл с открытыми данными; − out (out) файл с шифрованными данными. error_status_t VCERT1API VCERT_StrDecryptFile (context_t hCtx, decrypt_param_t * pDecryptPara, char * in, char * out, decrypt_result_t * pDecryptResult) Функция анонимного потокового расшифрования файла Примечание - Данная функция поддерживает расшифрование данных в формате PKCS#7, соответственно, при заполнении параметра pDecryptPara необходимо указывать флаг FLAG_PKCS7. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pDecryptPara (in) параметры выполнения расшифрования; − in (in) файл с шифрованными данными; − out (out) файл с открытыми данными; − pDecryptResult (out) результат расшифрования, содержащий сертификат отправителя зашифрованного сообщения (только для систем с неанонимным шифрованием). error_status_t VCERT1API VCERT_StrEncryptedInfoFile (context_t hCtx, char * encrypted, encrypted_info_result_t * pEncryptedInfo) Функция потокового получения информации о зашифрованном файле Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − encrypted (in) файл с шифрованными данными; − pEncryptedInfo (out) информация о файле с шифрованными данными. 1.5.6 Низкоуровневые функции error_status_t VCERT1API VCERT_SignHashMem (context_t hCtx, certid_t * mycert, mem_blk_t * hash, mem_blk_t * sign) 49 ВАМБ.00075-02 33 01 Функция вычисления ЭП хэш-функции данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − mycert (in) идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ); − hash (in) блок с хэш-функцией данных; − sign_out (out) вычисленная ЭП хэш-функции данных. error_status_t VCERT1API VCERT_VerifyHashMem (context_t hCtx, certid_t * mycert, mem_blk_t * sender, mem_blk_t * hash, mem_blk_t * sign) Функция проверки ЭП хэш-функции данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − mycert (in) идентификатор сертификата для определения используемой сессии КС (должен быть NULL при использовании локального СКЗИ); − sender (in) сертификат, на котором была выполнена ЭП, в DER-кодировке; − hash (in) блок с хэш-функцией данных; − sign (in) ЭП хэш-функции данных. error_status_t VCERT1API VCERT_VerifyCert (context_t hCtx, verify_param_t * pVerifyPara, mem_blk_t * enccert, certificate_t * cert) Функция построения цепочки и проверки действительности сертификата Примечание - Проверка действительности сертификата выполняется на текущий момент времени. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки сертификата; − enccert (in) проверяемый сертификат в DER-кодировке; − cert (out) раскодированный и разобранный сертификат. error_status_t VCERT1API VCERT_VerifyCertificatePolicy (context_t hCtx, verify_policy_param_t * pPolicyPara, mem_blk_t * cert) Функция построения цепочки и проверки политики сертификата Примечание - Проверка политики сертификата выполняется на заданный момент времени. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pPolicyPara (in) параметры проверки сертификата; 50 ВАМБ.00075-02 33 01 − cert (in) проверяемый сертификат в DER-кодировке. error_status_t VCERT1API VCERT_VerifyCrlPolicy (context_t hCtx, verify_policy_param_t * pPolicyPara, mem_blk_t * crl) Функция построения цепочки и проверки политики СОС Примечание - Проверка политики СОС выполняется на заданный момент времени. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pPolicyPara (in) параметры проверки СОС (необходимо установить флаг проверки политики СОС FLAG_POLICY_VERIFY_CRL); − crl (in) проверяемый СОС в DER-кодировке. 1.5.7 Функции преобразования форматов error_status_t VCERT1API VCERT_DetachSignMem (context_t hCtx, mem_blk_t * in, mem_blk_t * data, mem_blk_t * sign) Функция отсоединения ЭП от подписанного блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − in (in) блок данных с присоединенной(ыми) ЭП; − data (out) блок данных, отделенный от ЭП; − sign (out) ЭП в отсоединенном формате. error_status_t VCERT1API VCERT_AttachSignMem (context_t hCtx, mem_blk_t * data, mem_blk_t * sign, mem_blk_t * out) Функция присоединения ЭП к блоку данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − data (in) блок данных, отделенный от ЭП; − sign (in) ЭП в отсоединенном формате; − out (out) блок данных с присоединенной(ыми) ЭП. error_status_t VCERT1API VCERT_DetachSignFile (context_t hCtx, char * in, char * data, char * sign) Функция отсоединения ЭП от подписанного файла Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − in (in) файл с присоединенной(ыми) ЭП; − data (out) файл данных, отделенный от ЭП; 51 ВАМБ.00075-02 33 01 − sign (out) ЭП в отсоединенном формате. error_status_t VCERT1API VCERT_AttachSignFile (context_t hCtx, char * data, char * sign, char * out) Функция присоединения ЭП к файлу данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − data (in) файл данных, отделенный от ЭП; − sign (in) ЭП в отсоединенном формате; − out (out) файл с присоединенной(ыми) ЭП. size_t VCERT1API VCERT_EncodeMem (unsigned char * to, const unsigned char * from, size_t n) Функция закодирования бинарных данных в кодировку Base64 Примечания: 1 Данную функцию можно использовать для представления подписанных или зашифрованных данных в текстовом формате, например, XML. 2 Данная функция не возвращает в закодированных данных символы, не входящие в алфавит Base64, описанный в RFC 4648. Возвращаемые значения: реальный размер закодированных данных в кодировке Base64 в случае успеха, или отрицательное значение (большее или равное 0x80000000) в случае ошибки. Аргументы: − to (out) заранее выделенный буфер для размещения закодированных данных. Для определения размера буфера следует использовать макро VCERT_BASE64_LEN(n); − from (in) исходный буфер с бинарными данными для закодирования; − n (in) размер буфера с бинарными данными для закодирования. Пример 8 - Вычисление ЭП в отсоединенном формате с последующей распечаткой XML документа: u n s i g n e d c har * t e x t = ( u n s i g n e d char *) "<Data>123−KDHR</Data >"; mem_blk_t data = { s i z e o f ( t e x t ) , t e x t } ; mem_blk_t s i g n = { 0 } ; sign_param_t SignParam = { 0 } ; error_status_t rc = 0; char szError [ 2 5 6 ] ; u n s i g n e d c har * b 6 4 s i g n ; size_t b64len ; SignParam . f l a g = FLAG_DETACHED; r c = VCERT_SignMem ( g_hCtx , &SignParam , &data , NULL, &s i g n ) ; i f ( 0 == r c ) { b 6 4 s i g n = m a l l o c (VCERT_BASE64_LEN( s i g n . l e n ) ) ; 52 ВАМБ.00075-02 33 01 /* необходимо добавить обработку ошибок . . . */ b 6 4 l e n = VCERT_EncodeMem( b64sign , s i g n . buf , s i g n . l e n ) ; i f (FAILED( b 6 4 l e n ) ) { p r i n t f ( " E r r o r i s %s (%08X) " , VCERT_GetErrorText ( b64len , s z E r r o r , s i z e o f ( szError ) , b64len ) ; } else { p r i n t f ("< Sign>%s </Sign >", b 6 4 s i g n ) ; } } size_t VCERT1API VCERT_DecodeMem (unsigned char * to, const unsigned char * from, size_t n) Функция раскодирования бинарных данных из кодировки Base64 Примечание - Данная функция завершается с ошибкой при наличии в закодированных данных символов, не входящих в алфавит Base64, описанный в RFC 4648. Возвращаемые значения: реальный размер раскодированных бинарных данных в случае успеха, или отрицательное значение (большее или равное 0x80000000) в случае ошибки. Аргументы: − to (out) заранее выделенный буфер для размещения раскодированных данных. Размер буфера должен быть равен размеру буфера с закодированными данными; − from (in) исходный буфер с закодированными данными в кодировке Base64; − n (in) размер буфера с закодированными данными в кодировке Base64. 1.5.8 Вспомогательные функции error_status_t VCERT1API VCERT_FindCert (context_t hCtx, find_param_t * pFindPara, find_result_t * pFindResult) Функция поиска сертификата(ов) в справочнике(ах) по заданному шаблону Примечания: 1 Если не указаны флаги FLAG_FIND_NOVERIFY, FLAG_FIND_NOVERIFY или FLAG_FIND_NOTIMECHECK, то данная функция возвращает все найденные действительные (по построению цепочки, по сроку действия, по сроку действия закрытого ключа) сертификаты. 2 При указании флага FLAG_FIND_MY производится поиск рабочего сертификата (для которого есть соответствующий закрытый ключ). 3 Стандартная очередность поиска сертификатов по справочникам такова: − в начале, если не задан флаг FLAG_FIND_IGNORE_CACHED, поиск сертификата производится в кэше среди уже проверенных и кэшированных объектов; − далее, если не задан флаг FLAG_FIND_IGNORE_LOCAL, поиск сертификата продолжается в локальном справочнике сертификатов; − и в конце, если задан флаг FLAG_FIND_REMOTE и настроено подключение к сетевому справочнику сертификатов, поиск сертификата завершается в последнем. Необходимо отметить, что если поиск производится по уникальному идентификатору сертификата, то для 53 ВАМБ.00075-02 33 01 поиска в сетевом справочнике установка флага FLAG_FIND_REMOTE не требуется, достаточно лишь наличие подключения к сетевому справочнику сертификатов; − если поиск выполняется по уникальному идентификатору сертификата, то, при нахождении первого сертификата, удовлетворяющего шаблону, процесс поиска обрывается; − если поиск производится не по уникальному идентификатору сертификата, то процесс поиска не завершится до полного просмотра всех доступных справочников сертификатов и нахождения всех сертификатов, удовлетворяющих шаблону. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pFindPara (in) параметры поиска и шаблон сертификата; − pFindResult (out) результат поиска - массив найденных сертификатов. Пример 9 - Поиск всех сертификатов по X.500 имени владельца и заданному в альтернативном имени адресом эл. почты с последующим диалогом выбора сертификата и с поиском в сетевом справочнике: find_param_t FindParam = { 0 } ; find_result_t FindResult = {0}; error_status_t rc = 0; char szError [ 2 5 6 ] ; certid_t CertId1 = {0}; C e r t I d . type = ID_KEYID ; C e r t I d . i d . keyId = " 0 0 0 1 2 2 2 2 2 2 0 1 " ; FindParam . f l a g = FLAG_FIND_REMOTE | FLAG_FIND_SELECTUI; FindParam . mycert = &C e r t I d 1 ; FindParam . c e r t T e m p l a t e . f i e l d s = FIELD_SUBJECT | FIELD_SUBJECTALTNAME; FindParam . c e r t T e m p l a t e . s u b j e c t = " cn=ivanov , dc=x509 , dc=ru " ; FindParam . c e r t T e m p l a t e . subjectAltName . e m a i l A d d r e s s = " ivanov@x509 . ru " ; FindParam . i n f o = FIELD_SUBJECT | FIELD_KEYID | FIELD_CERTHASH; r c = VCERT_FindCert ( g_hCtx , &FindParam , &F i n d R e s u l t ) ; i f ( 0 == r c ) { /* при задании флага FLAG_FIND_SELECTUI будет найден максимум один сертификат */ p r i n t f ( " Found %s (%s ) \ n " , F i n d R e s u l t . s e n d e r . c e r t s [ 0 ] . s u b j e c t , F i n d R e s u l t . s e n d e r . c e r t s [ 0 ] . keyId ) ; } VCERT_FreeFindResult ( g_hCtx , &F i n d R e s u l t ) ; Пример 10 - Поиск всех рабочих сертификатов (для которых есть закрытый ключ): find_param_t FindParam = { 0 } ; find_result_t FindResult = {0}; error_status_t rc = 0; 54 ВАМБ.00075-02 33 01 FindParam . f l a g = FLAG_FIND_MY; FindParam . i n f o = FIELD_SUBJECT | FIELD_CERTHASH; r c = VCERT_FindCert ( g_hCtx , &FindParam , &F i n d R e s u l t ) ; i f ( 0 == r c ) { /* при использовании локального СКЗИ будет найден один сертификат , в случае КС − по количеству рабочих сессий */ p r i n t f ( " Found %d c e r t i f i c a t e s : \ n " , F i n d R e s u l t . num ) ; f o r ( i n t i = 0 ; i < F i n d R e s u l t . num ; i ++) p r i n t f ("%d : %s \n " , i + 1 , F i n d R e s u l t . s e n d e r . c e r t s [ i ] . s u b j e c t ) ; } VCERT_FreeFindResult ( g_hCtx , &F i n d R e s u l t ) ; error_status_t VCERT1API VCERT_GenRandom (context_t hCtx, unsigned int len, mem_blk_t * random) Функция генерации случайного блока данных Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − len (in) размер случайного блока данных; − random (out) случайный блок данных. error_status_t VCERT1API VCERT_AddCertificate (context_t hCtx, add_param_t * pAddPara, mem_blk_t * cert) Функция добавления сертификата в локальный справочник Примечание - Данная функция оставлена для обеспечения совместимости с уже существующим ПО. Для новых разработок рекомендуется использовать функцию VCERT_ImportMem(). Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pAddPara (in) параметры добавления объекта; − cert (in) сертификат в DER-кодировке. error_status_t VCERT1API VCERT_AddCRL (context_t hCtx, add_param_t * pAddPara, mem_blk_t * crl) Функция добавления COC в локальный справочник Примечание - Данная функция оставлена для обеспечения совместимости с уже существующим ПО. Для новых разработок рекомендуется использовать функцию VCERT_ImportMem(). Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; 55 ВАМБ.00075-02 33 01 − pAddPara (in) параметры добавления объекта; − crl (in) СОС в DER-кодировке. error_status_t VCERT1API VCERT_ImportMem (context_t hCtx, import_param_t * pImportPara, mem_blk_t * in) Функция добавления объекта/объектов из блока данных Примечание - Данная функция позволяет импортировать в локальный справочник сертификатов сертификаты и СОС в DER-кодировке и в Base64-кодировке, обновления, заверенные ЦС или ЦР, а также устанавливать новый рабочий сертификат (только для локального СКЗИ). Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pImportPara (in) параметры выполнения импорта; − in (in) импортируемый блок данных. error_status_t VCERT1API VCERT_ImportFile (context_t hCtx, import_param_t * pImportPara, char * in) Функция добавления объекта/объектов из файла Примечание - Данная функция позволяет импортировать в локальный справочник сертификатов сертификаты и СОС в DER-кодировке и в Base64-кодировке, обновления, заверенные ЦС или ЦР, а также устанавливать новый рабочий сертификат (только для локального СКЗИ). Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pImportPara (in) параметры выполнения импорта; − in (in) импортируемый файл. error_status_t VCERT1API VCERT_ExportMem (context_t hCtx, export_param_t * pExportPara, mem_blk_t * out) Функция создания и экспорта запросов в блок данных Примечание - Данная функция позволяет создавать и экспортировать запросы на выпуск нового рабочего сертификата и на отзыв существующего рабочего сертификата (только для локального СКЗИ). Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pExportPara (in) параметры выполнения экспорта; − out (out) блок данных с экспортированным запросом. error_status_t VCERT1API VCERT_ExportFile (context_t hCtx, export_param_t * pExportPara, char * out) Функция создания и экспорта запросов в файл Примечание - Данная функция позволяет создавать и экспортировать запросы на выпуск 56 ВАМБ.00075-02 33 01 нового рабочего сертификата и на отзыв существующего рабочего сертификата (только для локального СКЗИ). Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pExportPara (in) параметры выполнения экспорта; − out (out) файл с экспортированным запросом. error_status_t VCERT1API VCERT_ParseCert (context_t hCtx, mem_blk_t * enccert, certinfo_t info, certificate_t * cert) Функция разбора и получения информации о сертификате Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − enccert (in) сертификат в DER-кодировке; − info (in) требуемая информация о сертификате (константы FIELD_XXX); − cert (out) структура разобранного сертификата. error_status_t VCERT1API VCERT_ParseCrl (context_t hCtx, mem_blk_t * enccrl, crlinfo_t info, crl_t * crl) Функция разбора и получения информации о СОС Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − enccrl (in) СОС в DER-кодировке; − info (in) требуемая информация о СОС (константы FIELD_CRL_XXX); − crl (out) структура разобранного СОС. error_status_t VCERT1API VCERT_ParseAltnameEx (context_t hCtx, mem_blk_t * encaltname, altname_ex_t * altname) Функция разбора и получения массива других имен альтернативного имени Примечание - Для получения альтернативного имени в DER-кодировке следует найти в массиве расширений сертификата альтернативное имя издателя (OID 2.5.29.18) или владельца (OID 2.5.29.17). При этом длина и данные альтернативного имени в DER-кодировке будут, соответственно, в элементах len и data структуры extension_t. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − encaltname (in) альтернативное имя в DER-кодировке; − altname (out) структура разобранного альтернативного имени. error_status_t VCERT1API VCERT_ParseBasicConstraintsEx (context_t hCtx, mem_blk_t * encbc, basic_constraints_ex_t * bc) 57 ВАМБ.00075-02 33 01 Функция разбора и получения информации о базовых ограничениях сертификата Примечание - Для получения базовых ограничений в DER-кодировке следует найти в массиве расширений сертификата базовые ограничения (OID 2.5.29.19). При этом длина и данные базовых ограничений в DER-кодировке будут, соответственно, в элементах len и data структуры extension_t. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − encbc (in) базовые ограничения в DER-кодировке; − bc (out) структура разобранных базовых ограничений. char * VCERT1API VCERT_GetErrorText (error_status_t error, char * str, size_t len) Функция получения текстового сообщения по коду ошибки Возвращаемые значения: указатель на буфер с текстовым описанием ошибки. Аргументы: − error (in) код ошибки; − str (out) указатель на буфер для текстового описания ошибки. Описание возвращается в виде строки, завершенной \0; − len (in) размер буфера для текстового описания ошибки. error_status_t VCERT1API VCERT_GetPkcs7InfoMem (context_t hCtx, mem_blk_t * pkcs7, pkcs7_info_t * pPkcs7Info) Функция получения информации о блоке данных в формате PKCS#7 Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pkcs7 (in) блок данных в формате PKCS#7; − pPkcs7Info (out) информация о блоке данных в формате PKCS#7. error_status_t VCERT1API VCERT_GetPkcs7InfoFile (context_t hCtx, char * pkcs7, pkcs7_info_t * pPkcs7Info) Функция получения информации о файле в формате PKCS#7 Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pkcs7 (in) файл в формате PKCS#7; − pPkcs7Info (out) информация о файле в формате PKCS#7. void VCERT1API VCERT_FreePkcs7Info (context_t hCtx, pkcs7_info_t * pPkcs7Info) Функция освобождения информации о сообщении в формате PKCS#7 Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: 58 ВАМБ.00075-02 33 01 − hCtx (in) контекст библиотеки; − pPkcs7Info (in) указатель на освобождаемую структуру. error_status_t VCERT1API VCERT_GetErrorLine (context_t hCtx, mem_blk_t * error, mem_blk_t * file, unsigned int * line) Функция получения внутреннего стека ошибок низкоуровневой библиотеки Примечания: 1 Для получения полного внутреннего стека ошибок данную функцию следует вызывать в том же потоке выполнения, что и завершившуюся ошибкой исходную функцию, пока возвращаемое ею значение равно VCERT_OK. 2 При возникновении ошибки в функции инициализации библиотеки данную функцию можно вызывать для получения внутреннего стека ошибок, используя в качестве контекста библиотеки значение NULL. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − error (out) код и текстовое описание ошибки; − file (out) имя исходного файла, в котором возникла ошибка; − line (out) строка исходного файла, в котором возникла ошибка. error_status_t VCERT1API VCERT_GetErrorLineEx (context_t hCtx, mem_blk_t * error, mem_blk_t * file, unsigned int * line, mem_blk_t * data) Расширенная функция получения внутреннего стека ошибок низкоуровневой библиотеки Примечания: 1 Для получения полного внутреннего стека ошибок данную функцию следует вызывать в том же потоке выполнения, что и завершившуюся ошибкой исходную функцию, пока возвращаемое ею значение равно VCERT_OK. 2 При возникновении ошибки в функции инициализации библиотеки данную функцию можно вызывать для получения внутреннего стека ошибок, используя в качестве контекста библиотеки значение NULL. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − error (out) код и текстовое описание ошибки; − file (out) имя исходного файла, в котором возникла ошибка; − line (out) строка исходного файла, в котором возникла ошибка; − data (out) расширенные данные ошибки. error_status_t VCERT1API VCERT_CheckExpiringCertKey (context_t hCtx, uint32_t * days, string_t keyId) Функция проверки истечения срока действия закрытого ключа в заданный период времени Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; 59 ВАМБ.00075-02 33 01 − days (in/out) период времени в днях (проверяемый период - на входе, период истечения - на выходе); − keyId (out) идентификатор закрытого ключа сформированного запроса на получение рабочего сертификата, для которого рабочий сертификат еще не был получен. error_status_t VCERT1API VCERT_CreateXmlRequest (context_t hCtx, flag_t flag, certificate_t * reqtmpl, mem_blk_t * xmlreq) Функция формирования закрытого ключа и XML запроса с парным открытым ключом Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − flag (in) флаги (могут использоваться FLAG_XML_REQUEST_XXX); − reqtmpl (in) шаблон сертификата, на основании которого создается XML запрос (имеют значение следующие поля шаблона сертификата: X.500 имя владельца, альтернативное имя владельца, политики использования, расширенные использования ключа, расширения и применение ключа); − xmlreq (out) сформированный XML запрос, содержащий парный открытый ключ. error_status_t VCERT1API VCERT_IssueCertificateStore (context_t hCtx, mem_blk_t * cert, char * psestore, char * localstore) Функция формирования справочников сертификатов пользователя Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − cert (in) новый рабочий сертификат для выдаваемых справочников (данный сертификат будет использован для подписания ПСП, и он также будет добавлен в качестве рабочего сертификата в ЛСП); − psestore (out) путь к создаваемому ПСП, в который будут перенесены все сертификаты корневых ЦС, входящие в ПСП контекста библиотеки; − localstore (in/out) путь к ЛСП, который был сформирован ЦР при выгрузке нового рабочего сертификата пользователя. error_status_t VCERT1API VCERT_ExportToSystemStore (context_t hCtx, flag_t flag) Функция экспорта сертификатов и СОС пользователя в системное хранилище ОС Windows Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − flag (in) флаги (могут использоваться FLAG_EXPORT_SYSTEM_STORE_XXX). error_status_t VCERT1API VCERT_ShowCertificate (context_t hCtx, mem_blk_t * cert) Функция отображения диалогового окна с информацией о сертификате Примечание - Данная функция доступна только при использовании локального СКЗИ. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: 60 ВАМБ.00075-02 33 01 − hCtx (in) контекст библиотеки; − cert (in) сертификат в DER-кодировке. Пример 11 - Показ сертификата отправителя зашифрованного сообщения (только для неанонимной криптографии): decrypt_param_t DecryptParam = { 0 } ; decrypt_result_t DecryptResult = {0}; error_status_t rc = 0; DecryptParam . i n f o = FIELD_CERENCODED; r c = VCERT_DecryptMem( g_hCtx , &DecryptParam , &encrypted , &out , &D e c r y p t R e s u l t ) ; /* необходимо добавить обработку ошибок . . . */ r c = VCERT_ShowCertificate ( g_hCtx , &D e c r y p t R e s u l t . certEncoded ) ; VCERT_FreeDecryptResult ( g_hCtx , &D e c r y p t R e s u l t ) ; error_status_t VCERT1API VCERT_ShowCrl (context_t hCtx, mem_blk_t * crl) Функция отображения диалогового окна с информацией о СОС Примечание - Данная функция доступна только при использовании локального СКЗИ. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − crl (in) COC в DER-кодировке. error_status_t VCERT1API VCERT_UpdateCRLs (context_t hCtx) Функция обновления найденных в локальном справочнике СОС из их точек распространения Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки. 1.5.9 Функции работы с памятью void VCERT1API VCERT_FreeMem (context_t hCtx, void * data) Функция освобождения блока памяти, выделенного библиотекой Примечание - Данная функция должна использоваться для освобождения блоков памяти, выделенных библиотекой и помеченных как выходные (out). Аргументы: − hCtx (in) контекст библиотеки; − data (in) указатель на блок памяти, выделенный библиотекой. void * VCERT1API VCERT_AllocMem (context_t hCtx, size_t len) Функция выделения блока памяти библиотеки Возвращаемые значения: не нулевой указатель на блок данных в случае успеха. Аргументы: 61 ВАМБ.00075-02 33 01 − hCtx (in) контекст библиотеки; − len (in) требуемый размер блока в байтах. void * VCERT1API VCERT_ReallocMem (context_t hCtx, void * data, size_t len) Функция перевыделения блока памяти библиотеки Возвращаемые значения: не нулевой указатель на блок данных в случае успеха. Аргументы: − hCtx (in) контекст библиотеки; − data (in) указатель на существующий блок памяти; − len (in) новый размер блока в байтах. void VCERT1API VCERT_FreeCertId (context_t hCtx, certid_t * pCertId) Функция освобождения структуры уникального идентификатора сертификата Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pCertId (in) указатель на освобождаемую структуру. void VCERT1API VCERT_FreeCert (context_t hCtx, certificate_t * pCert) Функция освобождения структуры сертификата Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pCert (in) указатель на освобождаемую структуру. Пример 12 - Показ освобождения результата проверки ЭП - функционирует аналогично вызову VCERT_FreeVerifyResult(). verify_result_t VerifyResult = {0}; f o r ( i n t i = 0 ; i < V e r i f y R e s u l t . sign_num ; i ++) { i f ( V e r i f y R e s u l t . s i g n s [ i ] . c e r t != NULL) { VCERT_FreeCertificate ( g_hCtx , V e r i f y R e s u l t . s i g n s [ i ] . c e r t ) ; VCERT_FreeMem( g_hCtx , V e r i f y R e s u l t . s i g n s [ i ] . c e r t ) ; } } VCERT_FreeMem( g_hCtx , V e r i f y R e s u l t . s i g n s ) ; void VCERT1API VCERT_FreeCrl (context_t hCtx, crl_t * pCrl) Функция освобождения структуры СОС Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; 62 ВАМБ.00075-02 33 01 − pCrl (in) указатель на освобождаемую структуру. void VCERT1API VCERT_FreeAltnameEx (context_t hCtx, altname_ex_t * pAltname) Функция освобождения структуры массива других имен альтернативного имени Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pAltname (in) указатель на освобождаемую структуру. error_status_t VCERT1API VCERT_CopyCert (context_t hCtx, certificate_t * in, certificate_t * out) Функция копирования полей структуры сертификата Примечание - Данная функция дублирует данные, на которые ссылается копируемая структура, но саму структуру она при этом не дублирует. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − in (in) указатель на копируемую структуру; − out (out) указатель на структуру-копию. void VCERT1API VCERT_FreeVerifyResult (context_t hCtx, verify_result_t * pVerifyResult) Функция освобождения структуры результата проверки ЭП Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyResult (in) указатель на освобождаемую структуру. void VCERT1API VCERT_FreeDecryptResult (context_t hCtx, decrypt_result_t * pDecryptResult) Функция освобождения структуры результата расшифрования Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pDecryptResult (in) указатель на освобождаемую структуру. void VCERT1API VCERT_FreeFindResult (context_t hCtx, find_result_t * pFindResult) Функция освобождения структуры результата поиска сертификатов Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pFindResult (in) указатель на освобождаемую структуру. 63 ВАМБ.00075-02 33 01 void VCERT1API VCERT_FreeSignedInfoResult (context_t hCtx, signed_info_result_t * pSignInfo) Функция освобождения структуры информации о подписанных данных Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pSignInfo (in) указатель на освобождаемую структуру. void VCERT1API VCERT_FreeEncryptedInfoResult (context_t hCtx, encrypted_info_result_t * pEncryptedInfo) Функция освобождения структуры информации о зашифрованных данных Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pEncryptedInfo (in) указатель на освобождаемую структуру. 1.5.10 Функции работы со штампами времени error_status_t VCERT1API VCERT_TspRequestFromPkcs7 (context_t hCtx, tsp_request_param_t * pRequestPara, mem_blk_t * pkcs7, mem_blk_t * request) Функция создания запроса на получение штампа времени из ЭП блока данных формата PKCS#7 Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pRequestPara (in) параметры создания запроса; − pkcs7 (in) подписанный блок данных в формате PKCS#7; − request (out) созданный запрос на получение штампа времени. error_status_t VCERT1API VCERT_TspSignResponse (context_t hCtx, tsp_response_param_t * pResponsePara, mem_blk_t * request, mem_blk_t * response) Функция вычисления ЭП запроса на получение штампа времени Примечание - Для вычисления ЭП запроса на получение штампа времени используемый для этого рабочий сертификат должен удовлетворять следующим условиям: − расширение сертификата X509v3 Область Применения Ключа должно быть помечено как критичное и должно содержать исключительно применения Электронная Подпись и Неотрекаемый; − расширение сертификата X509v3 Расширенная Область Применения Ключа должно быть помечено как критичное и должно содержать исключительно расширенную область применения Отметка времени (1.3.6.1.5.5.7.3.8); − расширение сертификата X509v3 Основные Ограничения должно быть помечено как критичное и должно содержать признак сертификата ЦС равный CA:FALSE. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. 64 ВАМБ.00075-02 33 01 Аргументы: − hCtx (in) контекст библиотеки; − pResponsePara (in) параметры вычисления ЭП запроса; − request (in) запрос на получение штампа времени; − response (out) подписанный запрос на получение штампа времени. error_status_t VCERT1API VCERT_TspVerifyResponse (context_t hCtx, tsp_verify_param_t * pVerifyPara, mem_blk_t * response, tsp_verify_result_t * pVerifyResult) Функция проверки ЭП запроса на получение штампа времени Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП запроса; − response (in) подписанный запрос на получение штампа времени; − pVerifyResult (out) результат проверки ЭП запроса. void VCERT1API VCERT_TspFreeVerifyResult (context_t hCtx, tsp_verify_result_t * pVerifyResult) Функция освобождения структуры результата проверки ЭП запроса на получение штампа времени Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyResult (in) указатель на освобождаемую структуру. error_status_t VCERT1API VCERT_TspUrlStampPkcs7Mem (context_t hCtx, tsp_request_param_t * pRequestPara, string_t url, mem_blk_t * in, mem_blk_t * out) Функция вычисления ЭП запроса на получение штампа времени из ЭП блока данных формата PKCS#7 на указанном сервере Примечания: 1 Данная функция помещает подписанный штамп времени, полученный от сервера, в список не заверенных атрибутов (Unauthenticated Attributes) PKCS#7 указанной по индексу ЭП. 2 В результате выполнения данной функции последовательность ЭП в результирующем блоке данных может отличаться от последовательности ЭП в исходном блоке данных. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pRequestPara (in) параметры создания запроса; − url (in) адрес сервера штампов времени (например, http://pki.x509.ru/tsp/); − in (in) подписанный блок данных в формате PKCS#7; − out (out) подписанный блок данных в формате PKCS#7 со штампом времени. 65 ВАМБ.00075-02 33 01 error_status_t VCERT1API VCERT_TspUrlStampPkcs7File (context_t hCtx, tsp_request_param_t * pRequestPara, string_t url, char * in, char * out) Функция вычисления ЭП запроса на получение штампа времени из ЭП файла формата PKCS#7 на указанном сервере Примечания: 1 Данная функция помещает подписанный штамп времени, полученный от сервера, в список не заверенных атрибутов (Unauthenticated Attributes) PKCS#7 указанной по индексу ЭП. 2 В результате выполнения данной функции последовательность ЭП в результирующем файле может отличаться от последовательности ЭП в исходном файле. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pRequestPara (in) параметры создания запроса; − url (in) адрес сервера штампов времени (например, http://pki.x509.ru/tsp/); − in (in) подписанный файл в формате PKCS#7; − out (out) подписанный файл в формате PKCS#7 со штампом времени. error_status_t VCERT1API VCERT_TspVerifyPkcs7Mem (context_t hCtx, tsp_verify_param_t * pVerifyPara, mem_blk_t * in, tsp_verify_result_t * pVerifyResult) Функция проверки ЭП запроса на получение штампа времени из ЭП блока данных формата PKCS#7 Примечание - Данная функция извлекает подписанный штамп времени из списка не заверенных атрибутов (Unauthenticated Attributes) PKCS#7 указанной по индексу ЭП. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП запроса; − in (in) подписанный блок данных в формате PKCS#7 со штампом времени; − pVerifyResult (out) результат проверки ЭП запроса. error_status_t VCERT1API VCERT_TspVerifyPkcs7File (context_t hCtx, tsp_verify_param_t * pVerifyPara, char * in, tsp_verify_result_t * pVerifyResult) Функция проверки ЭП запроса на получение штампа времени из ЭП файла формата PKCS#7 Примечание - Данная функция извлекает подписанный штамп времени из списка не заверенных атрибутов (Unauthenticated Attributes) PKCS#7 указанной по индексу ЭП. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП запроса; − in (in) подписанный файл в формате PKCS#7 со штампом времени; − pVerifyResult (out) результат проверки ЭП запроса. 66 ВАМБ.00075-02 33 01 1.5.11 Функции определения статуса сертификатов error_status_t VCERT1API VCERT_OcspCreateRequest (context_t hCtx, ocsp_request_param_t * pRequestPara, mem_blk_t * cert, mem_blk_t * request) Функция создания запроса на получение статуса сертификата Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pRequestPara (in) параметры создания запроса; − cert (in) проверяемый сертификат в DER-кодировке; − request (out) созданный запрос на получение статуса сертификата. error_status_t VCERT1API VCERT_OcspSignResponse (context_t hCtx, ocsp_response_param_t * pResponsePara, mem_blk_t * request, mem_blk_t * response) Функция вычисления ЭП запроса на получение статуса сертификата Примечание - Для вычисления ЭП запроса на получение статуса сертификата используемый для этого рабочий сертификат должен удовлетворять следующим условиям: − расширение сертификата X509v3 Область Применения Ключа должно быть помечено как критичное и должно содержать применения Электронная Подпись и Неотрекаемый; − расширение сертификата X509v3 Расширенная Область Применения Ключа должно содержать расширенную область применения Подпись OCSP (1.3.6.1.5.5.7.3.9); − сертификат должен содержать пустое расширение сертификата (расширение нулевой длины) Без проверки OCSP (1.3.6.1.5.5.7.3.9.5); − расширение сертификата X509v3 Основные Ограничения должно быть помечено как критичное и должно содержать признак сертификата ЦС равный CA:FALSE. − сертификат и соответствующий ему СОС должны содержать хотя бы одну функционирующую точку распространения СОС для возможности автоматического обновления СОС. Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pResponsePara (in) параметры вычисления ЭП запроса; − request (in) запрос на получение статуса сертификата; − response (out) подписанный запрос на получение статуса сертификата. error_status_t VCERT1API VCERT_OcspUrlObtainResponse (context_t hCtx, ocsp_request_param_t * pRequestPara, string_t url, mem_blk_t * cert, mem_blk_t * response) Функция вычисления ЭП запроса на получение статуса сертификата на указанном сервере Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; 67 ВАМБ.00075-02 33 01 − pRequestPara (in) параметры создания запроса; − url (in) адрес сервера получения статуса сертификатов (например, http://pki.x509.ru/ocsp/). Если значение равно NULL, то производится попытка извлечения адреса сервера из расширения Информация Доступа к Центру проверяемого сертификата; − cert (in) проверяемый сертификат в DER-кодировке; − response (out) подписанный запрос на получение статуса сертификата. error_status_t VCERT1API VCERT_OcspVerifyResponse (context_t hCtx, ocsp_verify_param_t * pVerifyPara, mem_blk_t * response, ocsp_verify_result_t * pVerifyResult) Функция проверки ЭП запроса на получение статуса сертификата Возвращаемые значения: VCERT_OK (0) в случае успеха или ненулевой код ошибки. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyPara (in) параметры проверки ЭП запроса; − response (in) подписанный запрос на получение статуса сертификата; − pVerifyResult (out) результат проверки ЭП запроса. void VCERT1API VCERT_OcspFreeVerifyResult (context_t hCtx, ocsp_verify_result_t * pVerifyResult) Функция освобождения структуры результата проверки ЭП запроса на получение статуса сертификата Примечание - Данная функция освобождает данные, на которые ссылается освобождаемая структура, но саму структуру она при этом не освобождает. Аргументы: − hCtx (in) контекст библиотеки; − pVerifyResult (in) указатель на освобождаемую структуру. 1.6 Описание файла конфигурации Файл конфигурации профилей pki1.conf может быть необходим при считывании информации о настроенных профилях во время вызова упрощенной функции инициализации VCERT_Initialize(). Поиск файла конфигурации профилей pki1.conf всегда производится в текущем каталоге вызывающего процесса. В файле конфигурации профилей pki1.conf могут использоваться следующие директивы: − # обозначает комментарий; − default задает профиль, используемый ”по умолчанию”; − local задает название настраиваемого профиля; − pse задает путь (URI) доступа к ПСП; − localstore задает путь (URI) доступа к ЛСП; − ldap задает путь (URI) доступа к сетевому справочнику сертификатов. Пример 13 - Файл конфигурации профилей pki1.conf: # используемый профиль по умолчанию default : testlocal 68 ВАМБ.00075-02 33 01 # профиль подключения к локальному СКЗИ с именем t e s t l o c a l local : testlocal # путь к Персональному справочнику сертификатов (ПСП) ps e : pse : / / s i g n e d /C: \ U s e r s \ Test1 \ l o c a l . pse # путь к Локальному справочнику сертификатов (ЛСП) l o c a l s t o r e : f i l e : / /C: \ U s e r s \ Test1 \ l o c a l . gdbm # путь к сетевому справочнику сертификатов l d a p : l d a p : / / ldap . x509 . ru / cn=Users , dc=x509 , dc=ru 69 ВАМБ.00075-02 33 01 2 ОПИСАНИЕ ОШИБОК Ниже (Таблица 1) приведено описание ошибок, возникающих при использовании библиотеки прикладного программного интерфейса с сертификатами ключей для операционной системы Windows и библиотек прикладного программного интерфейса КС . В левой колонке указано символьное имя ошибки и шестнадцатиричное значение соответствующего кода возврата. В средней колонке указывается место возможного возникновения ошибки: − LOCAL - функция(и) библиотеки (языки C/Java, платформа WIN32) прикладного программного интерфейса работы с сертификатами для платформы WIN32; − REMOTE - функция(и) библиотек интерфейса (язык C/платформа WIN32, язык Java) прикладного программного интерфейса КС. В дополнение к описанным ниже кодам возврата, функции библиотек интерфейса могут возвращать коды ошибок ОС Microsoft Windows, например, ERROR_INVALID_PARAMETER (0x00000057) или RPC_S_SERVER_UNAVAILABLE (0x000006BA). Детальное описание кодов ошибок ОС Microsoft Windows приведено в статье по ссылке http://http://msdn.microsoft.com/enus/library/windows/desktop/ms681386%28v=vs.85%29.aspx; − CS - исполняемый модуль КС, т.е. данная ошибка может возникнуть только в процессе выполнения КС, и она не является результатом вызова функции(й) библиотек интерфейса КС. В правой колонке приведено детальное описание и причина возникновения ошибки. Таблица 1 – Список ошибок Код возврата VCERT_OK (0x00000000) VCERT_E_GENERIC (0xE0700001) VCERT_E_INVALID_PARAMETER (0xE0700002) Место возникновения ошибки LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE VCERT_E_INVALID_CONTEXT (0xE0700003) LOCAL REMOTE CS VCERT_E_OPERATION_NOT_SUPPORTED (0xE0700004) LOCAL REMOTE CS LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE VCERT_E_INVALID_FLAG (0xE0700005) VCERT_E_NO_MEMORY (0xE0700006) VCERT_E_HASH (0xE0700007) VCERT_E_CERT_USAGE (0xE0700008) VCERT_E_CERT_FIND_PRIVATE_KEY (0xE0700009) LOCAL REMOTE CS LOCAL REMOTE CS Описание и причина возникновения ошибки Успешное завершение функции Данный код ошибки указывает на возможную внутреннюю ошибку, некорректные параметры настройки или на неправильные параметры, переданные в функции В функцию был передан некорректный параметр. Возникает в случае использования неправильного контекста библиотеки или других параметров, неподдерживаемых флагов или на некорректную длину массива Произошла попытка использования неправильного контекста библиотеки или контекста выполнения потоковой операции, нарушение параметров профилей в Реестре (в случае локальной библиотеки), ошибка в синтаксисе файла pki1.conf (в случае библиотеки КС) или ошибка при поиске объектов по запросу от АРМ УКС Неправильные значения в структурах local_param_t или crsrv_param_t, вызов неподдерживаемой функции или нераспознанная команда с АРМ УКС Некорректное использование флагов FLAG_DETACHED или FLAG_PKCS7 Произошла ошибка при попытке выделения блока памяти необходимого размера Произошла внутренняя ошибка СКЗИ при хэшировании (по ГОСТ Р 34.11-94 или ГОСТ Р 34.11-2012) данных из-за ошибки самотестирования криптографических процедур Отсутствует необходимое использование (шифрование или вычисление ЭП) или расширенное использование закрытого ключа сертификата Произошла ошибка при загрузке закрытого ключа во время инициализации контекста библиотеки работы с сертификатами или при запуске КС 70 ВАМБ.00075-02 33 01 Код возврата VCERT_E_PKCS7_SET_TYPE (0xE070000A) VCERT_E_PKCS7_ADD_SIGNATURE (0xE070000C) VCERT_E_PKCS7_ADD_CERTIFICATE (0xE070000D) VCERT_E_PKCS7_CONTENT_NEW (0xE070000E) VCERT_E_PKCS7_D2I (0xE070000F) VCERT_E_PKCS7_I2D (0xE0700010) VCERT_E_PKEY_NOT_GOST (0xE0700011) Место возникновения ошибки LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE VCERT_E_SIGN (0xE0700012) LOCAL REMOTE VCERT_E_VERIFY_POLICY (0xE0700013) VCERT_E_VERIFY_EXTKEYUSAGE (0xE0700014) LOCAL REMOTE LOCAL REMOTE VCERT_E_PKCS7_READ (0xE0700015) LOCAL REMOTE CS LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE VCERT_E_OVERFLOW (0xE0700016) VCERT_E_VERIFY (0xE0700019) VCERT_E_VERIFY_FORMAT (0xE070001A) VCERT_E_DELETE_SIGN (0xE070001B) VCERT_E_PKCS7_SET_CIPHER (0xE070001D) VCERT_E_PKCS7_SET_CIPHER_INFO (0xE070001E) VCERT_E_PKCS7_ADD_RECIPIENT (0xE070001F) VCERT_E_PKCS7_ENCRYPT (0xE0700020) VCERT_E_ENCRYPT (0xE0700021) VCERT_E_PKCS7_WRONG_TYPE (0xE0700022) LOCAL REMOTE CS VCERT_E_EVP_GET_CIPHER (0xE0700023) VCERT_E_DECRYPT_NO_RECIPIENTS (0xE0700024) VCERT_E_DECRYPT_NO_SENDER (0xE0700025) VCERT_E_DECRYPT_NO_RECIPIENT (0xE0700026) LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE VCERT_E_PKCS7_DECRYPT (0xE0700027) VCERT_E_DECRYPT (0xE0700028) LOCAL REMOTE LOCAL REMOTE CS Описание и причина возникновения ошибки Возникла нехватка ресурсов (оперативной памяти) при установке типа сообщения в PKCS#7 формате Возникла нехватка ресурсов (оперативной памяти) при вычислении ЭП сообщения в PKCS#7 формате Возникла нехватка ресурсов (оперативной памяти) при добавлении сертификата в подписанное сообщение в PKCS#7 формате Возникла нехватка ресурсов (оперативной памяти) при создании нового сообщения в PKCS#7 формате Ошибка раскодирования сообщения из DER-кодировки в PKCS#7 формате из-за его повреждения или нехватки ресурсов Возникла нехватка ресурсов (оперативной памяти) при закодировании в DER-кодировку сообщения в PKCS#7 формате Тип закрытого ключа СКЗИ не соответствует требуемому или у закрытого ключа неверный или нераспознанный идентификатор алгоритма Произошла внутренняя ошибка СКЗИ при вычислении ЭП из-за выгрузки закрытого ключа, ошибки самотестирования криптографических процедур или нехватки ресурсов Произошла ошибка при проверке наличия регламента в сертификате из-за его отсутствия в сертификате или нехватки ресурсов Произошла ошибка при проверке наличия расширенного использования ключа в сертификате из-за его отсутствия в сертификате или нехватки ресурсов Произошла ошибка при попытке раскодирования из DER-кодировки подписанного сообщения в PKCS#7 формате из-за его искажения или нехватки ресурсов Произошла ошибка при преобразовании данных из-за превышения допустимого размера Произошла общая ошибка проверки ЭП документа Выявлено нарушение формата подписанного сообщения или сообщение не является подписанным Произошла ошибка удаления ЭП из подписанного сообщения, связанная с нехваткой ресурсов Возникла ошибка установки типа зашифрованного сообщения в PKCS#7 формате из-за нехватки ресурсов Возникла ошибка установки сертификата отправителя зашифрованного сообщения в PKCS#7 формате из-за нехватки ресурсов Возникла ошибка добавления сертификата получателя зашифрованного сообщения в PKCS#7 формате из-за нехватки ресурсов Возникла ошибка финализации формирования и закодирования зашифрованного сообщения в PKCS#7 формате Возникла внутренняя ошибка СКЗИ при зашифровании сообщения из-за выгрузки закрытого ключа, ошибки самотестирования криптографических процедур или нехватки ресурсов Попытка использования флага FLAG_DETACHED, не соответствующая подписанному сообщению, или обнаружение нераспознанного идентификатора зашифрованного или подписанного сообщения в PKCS#7 формате Не был раcпознан идентификатор алгоритма шифрования при разборе зашифрованного сообщения в формате PKCS#7 Не найден список идентификаторов сертификатов получателей зашифрованного сообщения в формате PKCS#7 Не найден сертификат отправителя зашифрованного сообщения Произведена попытка расшифровать сообщение в PKCS#7 формате на сертификате, идентификатор которого отсутствует в списке идентификаторов сертификатов получателей Произошла ошибка расшифрования сообщения в PKCS#7 формате из-за его искажения, нехватки ресурсов или внутренней ошибки СКЗИ Возникла внутренняя ошибка СКЗИ при расшифровании сообщения из-за выгрузки закрытого ключа, ошибки самотестирования криптографических процедур или нехватки ресурсов 71 ВАМБ.00075-02 33 01 Код возврата VCERT_E_RANDOM (0xE0700029) Место возникновения ошибки LOCAL REMOTE VCERT_E_OPEN_CONFIG (0xE071002A) VCERT_E_READ_CONFIG (0xE071002B) VCERT_E_NO_DEFAULT_CONFIG (0xE071002C) LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE VCERT_E_OPEN_PSE (0xE070002D) LOCAL CS VCERT_E_OPEN_LOCALSTORE (0xE070002E) VCERT_E_VERIFY_STORE_USAGE (0xE070002F) VCERT_E_VERIFY_STORE (0xE0700030) VCERT_E_OPEN_LDAPSTORE (0xE0700031) VCERT_E_NO_STREAM_DATA (0xE0700032) LOCAL CS LOCAL CS LOCAL CS LOCAL CS LOCAL REMOTE VCERT_E_BAD_STREAM_EOC (0xE0700033) VCERT_E_VERIFY_CERT (0xE0700034) LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS VCERT_E_CERT_MISSING (0xE0700035) VCERT_E_CERT_EXPIRED (0xE0700036) VCERT_E_CERT_DAMAGED (0xE0700037) VCERT_E_CERT_BROKEN_CONSTRAINT (0xE0700038) VCERT_E_CERT_REVOKED (0xE0700039) VCERT_E_CERT_UNTRUSTED (0xE070003A) VCERT_E_CRL_MISSING (0xE070003B) VCERT_E_CRL_EXPIRED (0xE070003C) VCERT_E_CRL_DAMAGED (0xE070003D) VCERT_E_CERT_BROKEN_HIERARCHY (0xE070003E) VCERT_E_CHAIN_ERROR (0xE070003F) VCERT_E_TOO_MUCH_CERT (0xE0700040) LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS Описание и причина возникновения ошибки Произошла внутренняя ошибка СКЗИ при формировании случайной последовательности из-за ошибки самотестирования криптографических процедур или нехватки ресурсов Произошла ошибка при открытии конфигурационного файла с параметрами профилей pki1.conf Произошла ошибка при чтении конфигурационного файла с параметрами профилей pki1.conf При инициализации контекста библиотеки не было указано имя профиля и отсутствует профиль по умолчанию в конфигурационном файле с параметрами профилей pki1.conf Возникла ошибка открытия, чтения или записи файла ПСП при инициализации контекста локальной библиотеки или загрузке КС, ошибка выполнения экспорта запроса на получение нового сертификата или запроса на отзыв рабочего сертификата в PKCS#7 формате, или ошибка импорта файла с обновлениями Возникла ошибка открытия, чтения или записи файла или БД ЛСП при инициализации контекста локальной библиотеки или загрузке КС У файла ПСП или файла с обновлениями в формате PKCS#7 отсутствует или установлен некорректный идентификатор использования Нарушена целостность файла ПСП или файла с обновлениями в формате PKCS#7 Произошла ошибка подключения к сетевому справочнику сертификатов При попытке выполнения потокового расшифрования данных в формате PKCS#7 не была найдена ASN.1 последовательность шифрованного содержимого неопределенной длины Была произведена попытка расшифрования искаженных потоковых данных в формате PKCS#7 (не найдена метка окончания данных) Произошла ошибка при построении или проверке цепочки сертификата Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за отсутствия в справочниках необходимого сертификата издателя Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за присутствия в цепочке сертификата с истекшим сроком действия Произошла ошибка при попытке раскодировать сертификат из DER-кодировки или проверить его ЭП Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за нарушенных ограничений цепочки Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за наличия в цепочке отозванного сертификата Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за невозможности построения полной цепочки, или произошла ошибка при импорте обновления из-за нераспознанного сертификата, подписавшего это обновление Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за отсутствия в справочниках необходимого СОС издателя Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за присутствия в цепочке СОС с истекшим сроком действия При попытке раскодировать СОС из DER-кодировки или проверить его ЭП произошла ошибка Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за нарушенных ограничений иерархии Произошла общая ошибка при построении или проверке цепочки сертификата или СОС из-за нехватки ресурсов При поиске сертификата по уникальному критерию (Идентификатору ключа или Издателю и Серийному номеру) было найдено более одного сертификата 72 ВАМБ.00075-02 33 01 Код возврата VCERT_E_INVALID_USAGE (0xE0700041) VCERT_E_INVALID_SIGNATURE (0xE0700042) VCERT_E_OPENKEY_NOT_FOUND (0xE0700043) VCERT_E_SELFCHECK (0xE0700044) VCERT_E_UPDATECRL (0xE0700045) VCERT_E_CERT_NOT_FOUND (0xE0700046) VCERT_E_CERT_NOT_YET_VALID (0xE0700047) VCERT_E_REQ_NOT_FOUND (0xE0700048) VCERT_E_PKCS7_WRONG_ALGORITHM (0xE0700049) VCERT_E_KEY_EXPIRED (0xE070004C) VCERT_E_KEY_NOT_YET_VALID (0xE070004D) VCERT_E_CRL_NOT_YET_VALID (0xE070004E) VCERT_E_INIT_CSP (0xE070004F) VCERT_E_SIGN_INIT (0xE0700053) Место возникновения ошибки LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE CS LOCAL REMOTE CS LOCAL CS LOCAL CS VCERT_E_CRYPTO_INIT (0xE0700054) LOCAL CS VCERT_E_OPEN_PROFILES_KEY (0xE070005F) LOCAL VCERT_E_FIND_SESSION (0xE0700081) VCERT_E_SIGNLEN (0xE0700082) REMOTE CS LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE CS VCERT_E_DECRYPT_FORMAT (0xE0700083) VCERT_E_ADD_OBJECT (0xE0700087) VCERT_E_TOO_MANY_CERTS_FOUND (0xE0720089) VCERT_E_USER_CANCEL (0xE072008A) VCERT_E_OPEN_INFILE (0xE070008B) VCERT_E_OPEN_OUTFILE (0xE070008C) LOCAL REMOTE CS LOCAL LOCAL REMOTE LOCAL REMOTE Описание и причина возникновения ошибки При построении цепочки сертификата или СОС или при выполнении криптографической операции обнаружено, что сертификат не соответствует требуемому использованию (отсутствует необходимый регламент, использование или расширенное использование ключа) Произошла криптографическая ошибка СКЗИ при проверке ЭП из-за неверной ЭП При построении цепочки сертификата или СОС произошла ошибка получения открытого ключа издателя для проверки ЭП Произошла ошибка при выполнении самотестирования криптографических функций Произошла ошибка при поиске СОС для обновления в ЛСП Необходимый сертификат для выполнения проверки ЭП или для выполнения расшифрования сообщения не был найден в доступных справочниках сертификатов Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за присутствия в цепочке еще не действительного по времени сертификата Произошла ошибка при поиске запроса на получение нового рабочего сертификата в ЛСП из-за отсутствия ресурсов Была произведена попытка расшифрования данных в формате PKCS#7, зашифрованных блоком, с помощью потоковых функций расшифрования, или зашифрованное сообщение содержит нераспознанный идентификатор алгоритма Произошла ошибка из-за попытки использования закрытого ключа с истекшим сроком действия Произошла ошибка из-за попытки использования закрытого ключа с еще не наступившим сроком действия Произошла ошибка при построении или проверке цепочки сертификата или СОС из-за присутствия в цепочке еще не действительного по времени СОС При попытке инициализации контекста локальной библиотеки или запуске КС произошла внутренняя ошибка инициализации СКЗИ При попытке инициализации контекста локальной библиотеки или запуске КС произошла ошибка инициализации модуля поддержки ЭП СКЗИ При попытке инициализации контекста локальной библиотеки или запуске КС произошла ошибка инициализации модуля поддержки шифрования СКЗИ При попытке инициализации контекста локальной библиотеки произошла ошибка чтения конфигурации профилей Справочника сертификатов из Реестра Сессия КС, указанная в параметре функции, не найдена по ее идентификатору При добавлении или проверке ЭП произошла ошибка контроля длины или искажение формата подписанного сообщения Ошибка при попытке декодирования зашифрованного сообщения в формате PKCS#7 из-за его искажения или его недостаточной длины Произошла ошибка при добавлении объекта (сертификата, СОС или запроса на получение нового или на отзыв рабочего сертификата) в ПСП (для сертификатов корневого ЦС), ЛСП (для остальных объектов) или в файл в формате PKCS#7 для отправки в ЦР При выполнении криптографической операции найдено более одного сертификата по уникальному критерию поиска Операция прервана пользователем Произошла ошибка открытия входного файла Произошла ошибка открытия выходного файла 73 ВАМБ.00075-02 33 01 Код возврата VCERT_E_READ_FILE (0xE070008D) VCERT_E_WRITE_FILE (0xE070008E) VCERT_E_FILE_LENGTH (0xE070008F) VCERT_E_FILE_MAPPING (0xE0700090) VCERT_E_DELETE_OBJECT (0xE0700091) VCERT_E_INSUFFICIENT_SIGNS (0xE0700092) VCERT_E_VERIFY_CRL (0xE0700093) Место возникновения ошибки LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE CS VCERT_E_REQ_NEW (0xE0700098) LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE LOCAL VCERT_E_REQ_SIGN (0xE070009A) LOCAL VCERT_E_MAKE_REVREQ (0xE070009B) VCERT_E_SIGN_REVREQ (0xE070009C) VCERT_E_LOAD_PRIVATE_KEY (0xE070009D) VCERT_E_ADD_SIGNER (0xE070009E) LOCAL VCERT_E_GET_PUBKEY (0xE0700094) VCERT_E_PKCS7_DATA_INIT (0xE070009F) VCERT_E_BIO_WRITE (0xE07000A0) VCERT_E_OPEN_IDP (0xE07000A1) VCERT_E_READ_IDP (0xE07000A2) VCERT_E_SESSIONCORRUPTED (0xE07000A3) LOCAL LOCAL CS LOCAL CS LOCAL REMOTE LOCAL REMOTE LOCAL REMOTE CS LOCAL REMOTE CS LOCAL VCERT_E_MAC (0xE07000A4) LOCAL VCERT_E_CRYPT (0xE07000A5) LOCAL VCERT_E_SPOOFING (0xE07000A6) LOCAL VCERT_E_CERTDONOTMATCH (0xE07000A7) LOCAL VCERT_E_XMLINIT (0xE07000A8) LOCAL REMOTE REMOTE VCERT_E_INVALID_CREDENTIALS (0xE02000A8) VCERT_E_ACCESS_DENIED (0xE02000A9) VCERT_E_SESSION_BLOCKED (0xA02000AA) VCERT_E_CLIENT_INFO (0xE02000AB) REMOTE REMOTE REMOTE Описание и причина возникновения ошибки Произошла ошибка чтения или отображения в память входного файла Произошла ошибка записи или отображения в память выходного файла Произошла ошибка из-за некорректной длины входного файла (нулевой или более 2 Гбайт) Произошла ошибка отображения файла в оперативную память из-за нехватки ресурсов Произошла ошибка удаления объекта из ЛСП из-за нехватки ресурсов или искажения формата ЛСП Количество обнаруженных ЭП подписанного сообщения меньше, чем требуемое Произошла ошибка при построении или проверке цепочки СОС Произошла ошибка при получении открытого ключа из сертификата подписавшего, возникшая при проверке ЭП хэш-функции данных Произошла ошибка при создании запроса на получение нового рабочего сертификата из-за ошибки формирования закрытого ключа или нехватки ресурсов Произошла ошибка при вычислении ЭП запроса на получение нового рабочего сертификата из-за нехватки ресурсов Произошла ошибка при создании запроса на отзыв рабочего сертификата из-за нехватки ресурсов Произошла ошибка при вычислении ЭП запроса на отзыв рабочего сертификата из-за нехватки ресурсов Произошла ошибка при загрузке закрытого ключа с АРМ УКС или при установке нового рабочего сертификата Произошла ошибка при вычислении ЭП ПСП во время импорта обновления или при вычислении ЭП запроса Ошибка при формировании зашифрованного сообщения в формате PKCS#7 из-за отсутствия ресурсов Ошибка при формировании блока данных зашифрованного сообщения в формате PKCS#7 из-за отсутствия ресурсов Произошла ошибка при попытке подключения к точке распространения СОС во время выполнения операции обновления Произошла ошибка при чтении данных из точки распространения СОС во время выполнения операции обновления Произошла ошибка из-за неверной длины полученных данных контроля целостности во время проведения сеанса установления или при использовании шифрованного канала Произошла ошибка из-за несоответствия вычисленной контрольной суммы, требуемой во время проведения сеанса установления, или при использовании шифрованного канала Произошла ошибка при шифровании данных во время проведения сеанса установления или при использовании шифрованного канала из-за нехватки ресурсов или ошибки самотестирования криптографических процедур Обнаружено искажение типа передаваемого сообщения или данных сообщения во время проведения сеанса установления шифрованного канала Обнаружено несоответствие сертификата ответной стороны заданному шаблону при обработке данных во время проведения сеанса установления шифрованного канала Произошла ошибка при инициализации библиотеки разбора XML документов Обнаружены аутентификационные данные с отрицательной или нулевой длиной, переданные в сессию КС Доступ к сессии КС запрещен из-за неверных аутентификационных данных Сессия КС заблокирована или ожидает загрузки закрытого ключа Произошла ошибка получения данных о клиенте уровня сетевого протокола DCE-RPC 74 ВАМБ.00075-02 33 01 Код возврата VCERT_E_UNSECURE_CREDENTIALS (0xE02000AC) VCERT_E_RESIGN_PROHIBIT (0xE02000AD) VCERT_E_TSP_HASH_LENGTH (0xE0700100) VCERT_E_TSP_HASH_ALGORITHM (0xE0700101) VCERT_E_TSP_CERT_PURPOSE (0xE0700102) VCERT_E_TSP_SIGN_FAILED (0xE0700103) VCERT_E_TSP_NO_DIGEST (0xE0700104) VCERT_E_TSP_INVALID_SIGNER_NUM (0xE0700105) VCERT_E_TSP_NO_TST_INFO (0xE0700106) VCERT_E_TSP_RESP_D2I (0xE0700107) VCERT_E_TSP_RESP_NOT_ISSUED (0xE0700108) Место возникновения ошибки REMOTE REMOTE LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL VCERT_E_TSP_DIGEST_MISMATCH (0xE0700109) VCERT_E_OCSP_CERT_PURPOSE (0xE0700140) VCERT_E_OCSP_SIGN_FAILED (0xE0700141) VCERT_E_OCSP_RESP_D2I (0xE0700142) VCERT_E_OCSP_RESP_NOT_ISSUED (0xE0700143) LOCAL VCERT_E_OCSP_NOT_BASICRESP (0xE0700144) VCERT_E_OCSP_CERTID_MISMATCH (0xE0700145) VCERT_E_OCSP_ISSUER_MISMATCH (0xE0700146) LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL Описание и причина возникновения ошибки Длина аутентификационных данных меньше минимальной требуемой длины в восемь (8) символов Выполнение операции переподписания между указанными сессиями КС запрещено Неверная длина хэша при создании запроса на получение штампа времени Неизвестный или неверный алгоритм хэша при создании запроса на получение штампа времени Сертификат не может быть использован для вычисления ЭП запросов на получение штампа времени Произошла ошибка при вычислении ЭП запроса на получение штампа времени В списке атрибутов отсутствует хэш данных и/или ЭП с указанным индексом Штамп времени содержит неверное (не равное 1) количество подписантов Произошла ошибка при получении информационного блока штампа времени Произошла ошибка при выполнении раскодирования подписанного штампа времени из DER-кодировки Штамп времени не был выдан авторитетным источником, то есть значение статуса результата отличается от 0 (granted) и 1 (grantedWithMods) Полученный подписанный штамп времени содержит хэш данных, отличный от посланного в запросе хэша ЭП сообщения Сертификат не может быть использован для вычисления ЭП запросов на получение статуса сертификата Произошла ошибка при вычислении ЭП запроса на получение статуса сертификата Произошла ошибка при выполнении раскодирования подписанного запроса на получение статуса сертификата из DER-кодировки Запрос на получение статуса сертификата не был подписан сетевым ответчиком, то есть значение статуса результата отличается от 0 (successful) Тип подписанного запроса на получение статуса сертификата не является Базовым Идентификатор проверяемого сертификата из подписанного запроса на получение статуса сертификата отличается от посланного в запросе Имя издателя сертификата сетевого ответчика не соответствует имени издателя проверяемого сертификата 75 ВАМБ.00075-02 33 01 ПЕРЕЧЕНЬ ТАБЛИЦ 1 Список ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 76 ВАМБ.00075-02 33 01 Лист регистрации изменений Номера листов (страниц) Изм изменённых заменённых новых Подп № документа Входящий Всего № сопровоаннулиро- листов дительного (страниц) ванных докум и дата в докум Дата