public void Run() { /* * 1. Получаем сертификат от клиента * 2. Формируем объект xades из сертификата от клиента * 3. Подписываем исходное сообщение * 4. Вычисляем хеш от SignedInfo и отправляем его для подписи клиенту * 5. Изменяем подписанное сообщение - подменяем подпись */ var originalDoc = new XmlDocument() { PreserveWhitespace = true }; originalDoc.LoadXml(_xmlStr); // 1. Получаем сертификат от клиента XadesInfo xadesInfo = GetClientXadesInfo(); // 2. Формируем объект xades из сертификата от клиента XadesSignedXml xadesSignedXml = GetXadesSignedXml(xadesInfo, originalDoc); // 3. Подписываем исходное сообщение серверным сертификатом xadesSignedXml.ComputeSignature(); // 4. Вычисляем хеш от SignedInfo и отправляем его для подписи клиенту HashAlgorithm hash; xadesSignedXml.GetSignedInfoHash(out hash); var signature = _client.GetSignedHash(Convert.ToBase64String(hash.Hash)); // 5. Изменяем подписанное сообщение - подменяем подпись xadesSignedXml.Signature.SignatureValue = Convert.FromBase64String(signature); GisSignatureHelper.InjectSignatureToOriginalDoc(xadesSignedXml, originalDoc); Console.WriteLine("Получившееся сообщение:"); Console.WriteLine(originalDoc.OuterXml); Assert.IsFalse(originalDoc.OuterXml.Contains("unstructuredName")); }