COM - технология

Аббревиатура COM - это Component Object Model - компонентная объектная модель. Сутью использования данной технологии является то, что программы строятся из компонент, которые состоят из объектов, и доступ к зарегистрированным объектам ПО АП на обработку заверенных документов становится доступен как из HTML форм, так и из других программ установленных на компьютере пользователя.

Описание COM объектов и методов ПО АП

/* $Id: DS_COM_Readme.txt,v 1.2 2006/01/19 10:50:55 ---- Exp $ */
AppID: DSv1

ObjectClass: SecureDocument
Interface: SecureDocument

Примечание 1:
 Обращение к любому из методов в отсутствие запущенного DSv1 приводит к
 его запуску. Завершение DSv1 невозможно пока его компоненты используются
 через COM.

Примечание 2:
 Результаты работы sign2 & verify2 отражаются диалогом с кратким
 отчетом. Вывод диалога может быть подавлен выставлением одного из битов
 в параметре flags соответствующего метода.

Примечание 3:
 Диалог, позволяющий произвольно выбирать автора ЭЦП, редактировать
 комментарий к ЭЦП и задавать другие параметры метода sign2 выводится ТОЛЬКО
 если автор ЭЦП по умолчанию (указанный в настройках) не выбран либо
 недоступен.

Примечание 4:
 При передаче URL в качестве источника данных, допускается использование
 только URL схем file и http.

/*
* Sign2:
*    Формирует PKCS7/CMS SignedData от автора заданного в настройках и
*    в соответствии с переданными параметрами
*
*   data - исходные данные (opt)
*   data_url - наименование ресурса (указывает на файл с исходными данными) (opt)
*
* Примечание: исходные данные обязательно должны быть переданы хотя бы одним из
*   параметров data / data_url.
*  *   pSignature - при успешном завершении указывает на выделенный блок памяти,
*         содержащий сформированную ЭЦП (optional)
*
*   out_filepath - полный путь на файловой системе для сохранения ЭЦП.
*      Если файл с таким именем уже существует либо параметр опущен и
*      установлен флаг требующий сохранения ЭЦП на диске - выводится диалог
*      выбора файла.
*
*   comment - коментарий для включения в ЭЦП
*
*   flags - битовая маска для управления элементами диалога
*
* Значение полей битовой маски:
* Примечание: значения не перечисленных ниже полей, а также полей
*   с именами DS_CP7F_RESERVED* игнорируется
*
*  DS_CP7F_RESERVED1        0x00000001
*  DS_CP7F_RESERVED2        0x00000002
*  DS_CP7F_RESERVED3        0x00000004
*  DS_CP7F_RESERVED4        0x00000008
*  DS_CP7F_INC_DATA_URL_RO  0x00000010 - поле "включать наименование подписываемого ресурса в ЭЦП" нельзя изменять
*  DS_CP7F_INC_DATA_URL     0x00000020 - поле "включать наименование подписываемого ресурса в ЭЦП" взведено
*  DS_CP7F_INC_SDATE_RO     0x00000040 - поле "включать текущую дату в ЭЦП" нельзя изменять   
*  DS_CP7F_INC_SDATE        0x00000080 - поле "включать текущую дату в ЭЦП" взведено   
*  DS_CP7F_COMMENT_RO       0x00000100 - поле "комментарий" нельзя изменять
*  DS_CP7F_INC_COMMENT      0x00000200 - поле "включать комментарий" взведено
*  DS_CP7F_EXTERNAL_RO      0x00000400 - поле "формировать отдельный файл ЭЦП (внешняя подпись - P7S)" нельзя изменять
*  DS_CP7F_EXTERNAL         0x00000800 - поле "формировать отдельный файл ЭЦП (внешняя подпись - P7S)" взведено
*  DS_CP7F_RESERVED5        0x00001000
*  DS_CP7F_DO_SAVE          0x00002000 - сохранять в файл
*  DS_CP7F_SILENT           0x00004000 - подавляет вывод диалогового окна с результатами работы метода.
*  DS_CP7F_DO_COM_RET       0x00008000 - возвращать результаты работы через аргументы COM-метода. Если не указан ни один из флагов _DO_SAVE и _DO_COM_RET, то метод sign2 ведет себя как если бы был указан _DO_COM_RET.
*  DS_CP7F_RESERVED6        0x00010000
*  DS_CP7F_RESERVED7        0x00020000
*  DS_CP7F_RESERVED8        0x00040000
*  DS_CP7F_RESERVED9        0x00080000
*  DS_CP7F_URL_RO           0x00100000 - поле "URL" нельзя изменять
*  DS_CP7F_RESERVED10       0x00200000
*  DS_CP7F_RESERVED11       0x00400000
*  DS_CP7F_RESERVED12       0x00800000
*  DS_CP7F_BASE64           0x01000000 - эцп на выходе sign2, эцп
*    на входе verify2 и тело запроса на входе и выходе CMCRequest::process
*    должны быть закодированы в BASE64
*
*  DS_CP7F_BASE64_DATA      0x02000000 - "base64 индикатор" для параметра data
*
*  DS_CP7F_BSTR_DATA        0x04000000 - необходимость предварительной
*    перекодировки данных data из BSTR к оригинальному 8-и битному
*    представлению - необходимо например при передаче значений html-форм
*
*  Пример задания значения параметра flags:
*
*  flags = DS_CP7F_INC_DATA_URL | DS_CP7F_INC_DATA_URL_RO | DS_CP7F_URL_RO |
*    DS_CP7F_INC_SDATE_RO | DS_CP7F_INC_SDATE = 0x001000f0
*/

HRESULT sign2([in] BSTR data, [in] BSTR data_url, [in] BSTR out_filepath,
     [in] BSTR comment, [in] DWORD flags, [out, retval] BSTR* pSignature);

/*
* Verify2:
*   Производит проверку PKCS#7/CMS ЭЦП
*
*   signature - проверяемая ЭЦП (optional)
*   signature_url - наименование ресурса (указывает на файл ЭЦП) (optional)  *
* Примечание: ЭЦП обязательно должна быть передана хотя бы одним из
*   указанных параметров метода.
*  *   valid - по завершении содержит результат проверки ЭЦП:
*         0 - проверка не произведена
*         1 - не найден сертификат автора (необходим для проверки)
*         2 - ошибка вычисления дайджеста
*         3 - ЭЦП не верна
*         4 - ЭЦП верна, однако не удалось проверить сертификат автора,
*             либо сертификат автора недействителен
*       > 4 - ЭЦП верна, сертификат автора проверен
*  data - (для p7s - optional, для p7m - игнорируется) - внешние данные для проверки
*    отдельного файла с ЭЦП (p7s)
*
*  data_url - (optional)
*    для p7s - путь к файлу с исходным данными для проверки внешнего файла ЭЦП
*        если путь не указан - для поиска данных используется подписанный
*        атрибут LabeledURI либо диалоговое окно для выбора файла пользователем
*    для p7m - путь к файлу в который будут сохранены исходные данные,
*        содержащиеся в теле ЭЦП, в случае если сохранение необходимо
*
*   flags - битовая маска. аналог параметра flags в SecureDocument::sign2
*      для данного метода значащими являются биты:
*        DS_CP7F_BASE64,
*        DS_CP7F_BASE64_DATA,
*        DS_CP7F_BSTR_DATA,
*        DS_CP7F_DO_SAVE,
*        DS_CP7F_SILENT
*/
HRESULT verify2( [in] BSTR signature, [in] BSTR signature_url,
   [in] BSTR data, [in] BSTR data_url, [in] long flags,
   [out, retval] long *valid );

Пример использования методов sign2 и verify2 приведен на странице 
http://www.top-cross.ru/Pki/p7m/index.html 

© 2005 LLC Top Cross
All Rights Reserved
info@top-cross.ru