IDocumentService.AddSignatures — метод (Document, SignedCms)

Данный метод добавляет коллекцию новых подписей в список подписей карточки, и устанавливает ЭП на поля, основные и дополнительные файлы документа. Позволяет использовать для подписания криптографическое сообщение типа SignedCms.

Синтаксис

IEnumerable<BaseCardSignature> AddSignatures(Document document, System.Security.Cryptography.Pkcs.SignedCms signedCms)
Параметры
document

Тип: Document

Подписываемый документ

signedCms

Тип: SignedCms

Сообщение CMS/PKCS 7

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

Тип: System.Collections.Generic.IEnumerable<BaseCardSignature>

Список подписей

Исключения

Исключение Условие

System.ArgumentNullException

Ошибка возвращается в случае, если не задан параметр document или signedCms.

Заметки

Данный метод может быть использован для импорта подписанного файла, сохранённого в виде сообщения CMS/PKCS 7, в карточку. Docsvision экспортирует подписанные файлы в один файл с расширением .p7s, либо в два файла: экспортируемый файл и отдельно сообщение CMS/PKCS 7 в виде файла с расширением .p7s. Для извлечения исходного файла из сообщения предназначен метод IDocumentService.DecodeSignedDocument.

Примеры

Ниже приведён пример использования метода AddSignatures в скрипте карточки. В данном примере выполняется импорт основного файла, экспортированного с отсоединенной подписью из карточки. Файл и подпись хранятся в одном каталоге и имеют идентичные названия (у криптографического сообщения добавлено расширение .p7s).

using System.Security.Cryptography;
using System.Security.Cryptography.Pkcs;
using System.Windows.Forms;
using System.Windows.Forms.Design;

using DocsVision.BackOffice.ObjectModel;
using DocsVision.BackOffice.ObjectModel.Services;
using DocsVision.Platform.ObjectModel;

namespace BackOffice
{
 public class CardDocumentПримерScript : CardDocumentДокументУДScript
 {
  private void importMainFile_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  {
   Document document = (base.BaseObject as Document);
   ObjectContext objectContext = base.CardControl.ObjectContext;

   IDocumentService documentService = objectContext.GetService<IDocumentService>();
   IUIService uiService = objectContext.GetService<IUIService>(); (1)

   OpenFileDialog openFileDialog = new OpenFileDialog();
   openFileDialog.Multiselect = false;
   openFileDialog.Filter = "Все файлы (*.*)|*.*";
   DialogResult result = openFileDialog.ShowDialog();
   if (result != DialogResult.OK) return; (2)

   string fileName = openFileDialog.FileName;
   string p7sFileName = fileName + ".p7s"; (3)

   if (!System.IO.File.Exists(p7sFileName)) return; (4)

   DocumentFile mainFile = documentService.AttachMainFile(document, fileName); (5)

   SignedCms signedCms;

   documentService.DecodeSignedDocument(p7sFileName, document, out signedCms); (6)

   try
   {
    signedCms.CheckSignature(false);
   } catch (CryptographicException)
   {
    documentService.RemoveMainFile(document, mainFile);
    uiService.ShowError("ЭП недействительна");
    return; (7)
   }

   documentService.AddSignatures(document, signedCms); (8)
  }
 }
}
1 Получение необходимых сервисов.
2 Выбор файла для импорта. Предполагается выбор только импортируемого файла, криптографическое сообщение будет загружено автоматически.
3 Получение имён файла и сообщения.
4 Не подписанные файлы не загружаются.
5 Предварительная загрузка основного файла. Необходима для корректной проверки подписи.
6 Выгрузка сообщения CMS/PKCS 7 из файла.
7 Проверка действительности подписи и сертификата. В случае недействительности загруженный ранее файл будет удалён.
8 Подписание документа.

К скрипту карточки требуется добавить сборку System.Security.dll.