/// <summary> /// Подписывает документ, отправленный ранее (для пересланных и документов без подписи) /// </summary> /// <param name="flowType">Тип документооборота</param> /// <param name="sign">Подпись документа</param> public void SignDocument(FlowType flowType, Sign sign) { CheckAutorizedInvoke(() => { client.SignDocument(Token, flowType, sign); return true; }); }
public Message() { Documents = new Document[0]; Signs = new Sign[0]; SimpleSignatures = new SimpleSignature[0]; }
public Message() { Documents = new Document[0]; Signs = new Sign[0]; }
private X509Certificate2 CheckSignAndGetCertificate(FullDocumentInfo documentInfo, Sign sign) { var document = documentInfo.Document; if (document.NeedReceipt && IsNoticeRequired(documentInfo)) { UserInput.Warning("Не удалось проверить подпись документа т.к. на него запрошено УОП"); return null; } var contentInfo = new ContentInfo(GetDocumentContent(document)); var signedCms = new SignedCms(contentInfo, true); try { // проверям подпись (действительность сервтификата не проверям для простоты) signedCms.Decode(sign.Raw); signedCms.CheckSignature(true); } catch (CryptographicException) { UserInput.Error("Подпись на документ {0} недействительна", document.Id); return null; } var certificate = signedCms.Certificates[0]; return certificate; }
/// <summary> /// Подписание документа /// </summary> private void SignDocument() { // нужен сертификат if (_context.Certificate == null) ChooseCertificate(); var flowType = ChooseFlowType(); var documentId = UserInput.ReadParameter("Введите ИД документа"); byte[] signData; if (UserInput.ChooseYesNo("Загрузить подпись из файла", false)) { do { var signPath = UserInput.ReadParameter("Введите имя файла, содержащего подпись"); if (!Path.IsPathRooted(signPath)) signPath = Path.Combine(Environment.CurrentDirectory, signPath); if (!File.Exists(signPath)) { UserInput.Error("Файл не найден {0}", signPath); continue; } signData = File.ReadAllBytes(signPath); break; } while (true); } else { signData = CryptoApiHelper.Sign( _context.Certificate, _context.ServiceClient.GetDocumentContent(_context.CurrentBox, documentId), true); } var sign = new Sign { From = _context.CurrentBox, DocumentId = documentId, Raw = signData }; try { _context.ServiceClient.SignDocument(flowType, sign); UserInput.Success("Документ был успешно подписан"); } catch (Exception ex) { UserInput.Error(ex.ToString()); } }
private void ProcessSign(Sign sign) { UserInput.Separator(); var documentInfo = _context.ServiceClient.GetFullDocumentInfo(_context.CurrentBox, sign.DocumentId); Console.Out.WriteLine("Обрабатывается подпись на документ {0}", DocumentShortName(documentInfo)); var certificate = CheckSignAndGetCertificate(documentInfo, sign); if (certificate != null) { UserInput.Success("Подпись корректна, контрагент подписал документ {0}", certificate.GetNameInfo(X509NameType.SimpleName, false)); } }