private static bool VerifyXmlDocumentSignature(XmlDocument signedXmlDocument) { // Создание подписчика XML-документа var signedXml = new GostSignedXml(signedXmlDocument); // Поиск узла с подписью var nodeList = signedXmlDocument.GetElementsByTagName("Signature", SignedXml.XmlDsigNamespaceUrl); // Загрузка найденной подписи signedXml.LoadXml((XmlElement)nodeList[0]); // Проверка подписи return signedXml.CheckSignature(); }
private static bool VerifySmevRequestSignature(XmlDocument signedSmevRequest) { // Создание подписчика XML-документа var signedXml = new GostSignedXml(signedSmevRequest) { GetIdElementHandler = GetSmevIdElement }; // Поиск узла с подписью var nodeList = signedSmevRequest.GetElementsByTagName("Signature", SignedXml.XmlDsigNamespaceUrl); // Загрузка найденной подписи signedXml.LoadXml((XmlElement)nodeList[0]); // Поиск ссылки на BinarySecurityToken var references = signedXml.KeyInfo.GetXml().GetElementsByTagName("Reference", WsSecurityExtNamespace); if (references.Count > 0) { // Определение ссылки на сертификат (ссылка на узел документа) var binaryTokenReference = ((XmlElement)references[0]).GetAttribute("URI"); if (!String.IsNullOrEmpty(binaryTokenReference) && binaryTokenReference[0] == '#') { // Поиск элемента с закодированным в Base64 сертификатом var binaryTokenElement = signedXml.GetIdElement(signedSmevRequest, binaryTokenReference.Substring(1)); if (binaryTokenElement != null) { // Загрузка сертификата, который был использован для подписи var signingCertificate = new X509Certificate2(Convert.FromBase64String(binaryTokenElement.InnerText)); // Проверка подписи return signedXml.CheckSignature(signingCertificate.GetPublicKeyAlgorithm()); } } } return false; }