Exemple #1
0
 /// <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;
     });
 }
Exemple #2
0
 public Message()
 {
     Documents        = new Document[0];
     Signs            = new Sign[0];
     SimpleSignatures = new SimpleSignature[0];
 }
Exemple #3
0
 public Message()
 {
     Documents = new Document[0];
     Signs     = new Sign[0];
 }
Exemple #4
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;
 }
Exemple #5
0
        /// <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());
            }
        }
Exemple #6
0
        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));
            }
        }
Exemple #7
0
 public Message()
 {
     Documents = new Document[0];
     Signs = new Sign[0];
 }