示例#1
0
        static void Main(string[] args)
        {
            try
            {
                var gisConfig    = (GisServiceConfiguration)ConfigurationManager.GetSection(Constants.GisServicesConfigSectionName);
                var xadesConfig  = (SigningConfiguration)ConfigurationManager.GetSection(Constants.XadesConfigSectionName);
                var xadesService = new GostXadesBesService();

                SentenceBuilder.UseSentenceBuilder(new RussianSentenceBuilder());

                ICommand command = Parser.Default.ParseArguments <SignOptions, VerifyOptions, CertificateOptions, GetStateOptions, SendOptions>(args)
                                   .MapResult(
                    (SignOptions o) => new SignCommand(o, xadesService, xadesConfig),
                    (VerifyOptions o) => new VerifyCommand(o, xadesService, xadesConfig),
                    (SendOptions o) => new SendCommand(o, xadesService, xadesConfig, gisConfig),
                    (GetStateOptions o) => new GetStateCommand(o, xadesService, xadesConfig, gisConfig),
                    (CertificateOptions o) => new CertificateCommand(o),
                    errors => (ICommand)null);
                command?.Execute();
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Произошла ошибка:");
                Console.WriteLine(ex.ToString());
            }
        }
示例#2
0
        public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
            try
            {
                FixHeaderForDebug(ref request);
                var messageRef = MessageString(ref request);

                if (!messageRef.Contains(Constants.SignElementId))
                {
                    return(null);
                }

                var service = new GostXadesBesService(ServicePointConfig.CryptoProviderType);

                var signedXml = service.Sign(messageRef,
                                             Constants.SignElementId,
                                             ServicePointConfig.CertificateThumbPrint,
                                             ServicePointConfig.PrivateKeyPassword);
                request = CreateMessageFromString(signedXml, request.Version);
            }
            catch (Exception ex)
            {
                string error = $"В {this.GetType().Name} произошло исключение: {ex.GetBaseException().Message}";
                Console.WriteLine(error);
            }

            return(null);
        }
        public void Validate_ValidSignedXml_NotThrows(string exampleXmlFileName, string elementId)
        {
            var data    = NUnitTestHelper.GetInputFile(exampleXmlFileName);
            var service = new GostXadesBesService();

            service.ValidateSignature(data, elementId);
        }
示例#4
0
        private static XmlDocument SignSTR(string xml, string elementId, string CertificateThumbprint, string Password)
        {
            var xadesService = new GostXadesBesService();


            return(xadesService.Sign(xml, elementId, CertificateThumbprint, Password));
        }
示例#5
0
        private static XmlDocument Sign(XmlDocument xml, string elementId, string CertificateThumbprint, string Password)
        {
            var xadesService = new GostXadesBesService();

            if (string.IsNullOrEmpty(elementId))
            {
                var rootNode   = xml.DocumentElement;
                var rootNodeId = GetRootId(rootNode);
                if (!string.IsNullOrEmpty(rootNodeId))
                {
                    Warning(string.Format("Не задан элемент для подписи. Используется корневой элемент {0} с Id {1}", rootNode.Name, rootNodeId));
                    elementId = rootNodeId;
                }
                else
                {
                    elementId = Guid.NewGuid().ToString("N");
                    var attribulte = xml.CreateAttribute("Id");
                    attribulte.Value = elementId;
                    rootNode.Attributes.Append(attribulte);
                    Warning(string.Format("Не задан элемент для подписи. Используется корневой элемент {0} с Id {1} (атрибут сгенерирован)", rootNode.Name, elementId));
                }
            }

            return(xadesService.Sign(xml.OuterXml, elementId, CertificateThumbprint, Password));
        }
        public void Validate_InvalidSignedXml_ThrowsInvalidOperationException(string exampleXmlFileName, string elementId, string expectedExceptionMessage)
        {
            var data    = NUnitTestHelper.GetInputFile(exampleXmlFileName);
            var service = new GostXadesBesService();
            var ex      = Assert.Throws <InvalidOperationException>(() => service.ValidateSignature(data, elementId));

            Assert.AreEqual(expectedExceptionMessage, ex.Message);
        }
        public void Sign_ValidXml_NotThrows(string exampleXmlFileName, string elementId)
        {
            var data    = NUnitTestHelper.GetInputFile(exampleXmlFileName);
            var service = new GostXadesBesService();

            var signedData = service.Sign(data, elementId, CertificateThumbprint, CertificatePassword);

            service.ValidateSignature(signedData, elementId);
        }
示例#8
0
        protected static void Validate(XmlDocument xml, string elementId)
        {
            var xadesService = new GostXadesBesService();

            if (string.IsNullOrEmpty(elementId))
            {
                var rootNode   = xml.DocumentElement;
                var rootNodeId = GetRootId(rootNode);
                if (!string.IsNullOrEmpty(rootNodeId))
                {
                    Warning(string.Format("Не задан элемент для проверки подписи. Используется элемент {0} с Id {1}", rootNode.Name, rootNodeId));
                    elementId = rootNodeId;
                }
                else
                {
                    throw new ArgumentException("Не задан Id элемента для проверки подписи и корневой элемент не имеет Id");
                }
            }
            xadesService.ValidateSignature(xml.OuterXml, elementId);
        }
        public static string GetSignElement(string messageString)
        {
            var originalDoc = new XmlDocument {
                PreserveWhitespace = true
            };

            originalDoc.LoadXml(messageString);

            var nodes = originalDoc.SelectNodes($"//node()[@Id='{CryptoConsts.CONTAINER_ID}']");

            if (nodes == null || nodes.Count == 0)
            {
                return(originalDoc.OuterXml);
            }

            var gostXadesBesService = new GostXadesBesService();

            string st = gostXadesBesService.Sign(messageString, CryptoConsts.CONTAINER_ID, CryptoConsts.CERTIFICATE_THUMBPRINT, string.Empty);

            return(st);
        }
示例#10
0
        // Метод добавления сигнатуры подписи в аттрибуты XML документа.
        private static string Sign(XmlDocument xml, string elementId, string certificateThumbprint, string passwd, string guid)
        {
            if (string.IsNullOrEmpty(elementId))
            {
                var rootNode   = xml.DocumentElement;
                var rootNodeId = GetRootId(rootNode);
                if (!string.IsNullOrEmpty(rootNodeId))
                {
                    //Warning($"Не задан элемент для подписи. Используется корневой элемент {rootNode.Name} с Id {rootNodeId}");
                    elementId = rootNodeId;
                }
                else
                {
                    elementId = guid;
                    var attribulte = xml.CreateAttribute("Id");
                    attribulte.Value = elementId;
                    rootNode.Attributes.Append(attribulte);
                    //Warning($"Не задан элемент для подписи. Используется корневой элемент {rootNode.Name} с Id {elementId} (атрибут сгенерирован)");
                }
            }
            GostXadesBesService xadesService = new GostXadesBesService();

            return(xadesService.Sign(xml.OuterXml, elementId, certificateThumbprint, passwd));
        }