Guest User

Untitled

a guest
Nov 23rd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. private static void SignXml(XmlDocument xmlDoc, X509Certificate2 uidCert)
  2. {
  3. RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)uidCert.PrivateKey;
  4.  
  5. // Chequea argumentos.
  6. if (xmlDoc == null)
  7. throw new ArgumentException("xmlDoc");
  8. if (rsaKey == null)
  9. throw new ArgumentException("Key");
  10.  
  11. // Crea un objeto SignedXml.
  12. SignedXml signedXml = new SignedXml(xmlDoc);
  13.  
  14. // Agrega la clave al documento SignedXml .
  15. signedXml.SigningKey = rsaKey;
  16.  
  17. // Crea una referencia a ser firmada.
  18. Reference reference = new Reference();
  19. reference.Uri = "";
  20.  
  21. // Agrega una ensobrada transformación a la referencia.
  22. XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
  23. reference.AddTransform(env);
  24.  
  25. // Agrega la referencia al objeto SignedXml.
  26. signedXml.AddReference(reference);
  27.  
  28.  
  29. // Agrega una RSAKeyValue KeyInfo
  30. KeyInfo keyInfo = new KeyInfo();
  31.  
  32. KeyInfoX509Data clause = new KeyInfoX509Data();
  33. clause.AddSubjectName(uidCert.Subject);
  34. clause.AddCertificate(uidCert);
  35. keyInfo.AddClause(clause);
  36. signedXml.KeyInfo = keyInfo;
  37.  
  38. // Computa la firma.
  39. signedXml.ComputeSignature();
  40.  
  41. // Obtiene la representación XML de la firma y la salva
  42. // en un objeto XmlElement .
  43. XmlElement xmlDigitalSignature = signedXml.GetXml();
  44. xmlDigitalSignature.Prefix = "ds";
  45. signedXml.ComputeSignature();
  46.  
  47. System.Console.WriteLine(signedXml.GetXml().InnerXml);
  48.  
  49. // Agrega el elemento al documento XML .
  50. xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
  51. //check signature
  52. XmlNodeList nodeList = xmlDoc.GetElementsByTagName("ds:Signature");
  53. if (nodeList.Count <= 0)
  54. {
  55. MessageBox.Show("Verification failed: No Signature was found in the document.");
  56. }
  57. else if (nodeList.Count >= 2)
  58. {
  59. MessageBox.Show("Verification failed: More that one signature was found for the document.");
  60. }
  61. else
  62. {
  63. signedXml.LoadXml((XmlElement)nodeList[0]);
  64. if (signedXml.CheckSignature())
  65. {
  66. MessageBox.Show("signature ok");
  67. }
  68. else
  69. {
  70. MessageBox.Show("signature failed");
  71. }
  72. }
  73. } // Fin SignXml
  74.  
  75. <CFE:EnvioCFE version="1.0" xmlns:CFE="http://cfe.dgi.gub.uy">
  76. <CFE:Caratula version="1.0"
  77. .....
  78.  
  79. </CFE:Caratula>
  80. <CFE xmlns:xd="http://www.w3.org/2000/09/xmldsig#" version="1.0" xmlns="http://cfe.dgi.gub.uy">
  81. <eTck>
  82. .............
  83. </eTck>
  84. <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  85. ........
  86. <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
  87. <DigestValue>eFoM+HEMPH+Ya+D1ljOm1yxEqsg=</DigestValue>
  88. </ds:Signature>
  89. </CFE>
  90. </CFE:EnvioCFE>
Add Comment
Please, Sign In to add comment