Guest User

Untitled

a guest
Oct 22nd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. public string GetSignatureForVersion(VERSION version)
  2. {
  3. var composition = version.Cast<ORIGINAL_VERSION>().data as COMPOSITION;
  4.  
  5. // При создании Ehr в data приходит EHR_STATUS, а не COMPOSITION
  6. if (composition == null)
  7. return string.Empty;
  8.  
  9. X509Certificate2 certificate = GetCertificate(composition.archetype_details.template_id.value);
  10.  
  11. if (certificate == null)
  12. return string.Empty;
  13.  
  14. var doc = new XmlDocument
  15. {
  16. PreserveWhitespace = false
  17. };
  18. doc.LoadXml(version.Serialize<VERSION>());
  19.  
  20. var reference = new Reference { DigestMethod = CPSignedXml.XmlDsigGost3411Url, Uri = string.Empty };
  21. // Добавляем transform на подписываемые данные для удаления вложенной подписи.
  22. reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
  23. // Добавляем transform для канонизации.
  24. reference.AddTransform(new XmlDsigC14NTransform());
  25.  
  26. var keyInfo = new KeyInfo();
  27. keyInfo.AddClause(new KeyInfoX509Data(certificate));
  28.  
  29. var signedXml = new SignedXml(doc)
  30. {
  31. SigningKey = certificate.PrivateKey
  32. };
  33. signedXml.AddReference(reference);
  34. signedXml.KeyInfo = keyInfo;
  35.  
  36. signedXml.ComputeSignature();
  37.  
  38. XmlElement xmlElement = signedXml.GetXml();
  39.  
  40. return Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlElement.InnerXml));
  41. }
Add Comment
Please, Sign In to add comment