IDocumentService.AddSignatures — метод (Document, SignedCms)
Данный метод добавляет коллекцию новых подписей в список подписей карточки, и устанавливает ЭП на поля, основные и дополнительные файлы документа. Позволяет использовать для подписания криптографическое сообщение типа SignedCms.
-
Пространство имён:
DocsVision.BackOffice.ObjectModel.Services
-
Сборка:
DocsVision.BackOffice.ObjectModel.dll
Синтаксис
IEnumerable<BaseCardSignature> AddSignatures(Document document, System.Security.Cryptography.Pkcs.SignedCms signedCms)
- Параметры
- Возвращаемое значение
-
Тип:
System.Collections.Generic.IEnumerable<BaseCardSignature>
Список подписей
Исключения
Исключение | Условие |
---|---|
Ошибка возвращается в случае, если не задан параметр |
Заметки
Данный метод может быть использован для импорта подписанного файла, сохранённого в виде сообщения 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
.