Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static void SignXml(XmlDocument xmlDoc, X509Certificate2 uidCert)
- {
- RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)uidCert.PrivateKey;
- // Chequea argumentos.
- if (xmlDoc == null)
- throw new ArgumentException("xmlDoc");
- if (rsaKey == null)
- throw new ArgumentException("Key");
- // Crea un objeto SignedXml.
- SignedXml signedXml = new SignedXml(xmlDoc);
- // Agrega la clave al documento SignedXml .
- signedXml.SigningKey = rsaKey;
- // Crea una referencia a ser firmada.
- Reference reference = new Reference();
- reference.Uri = "";
- // Agrega una ensobrada transformación a la referencia.
- XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
- reference.AddTransform(env);
- // Agrega la referencia al objeto SignedXml.
- signedXml.AddReference(reference);
- // Agrega una RSAKeyValue KeyInfo
- KeyInfo keyInfo = new KeyInfo();
- KeyInfoX509Data clause = new KeyInfoX509Data();
- clause.AddSubjectName(uidCert.Subject);
- clause.AddCertificate(uidCert);
- keyInfo.AddClause(clause);
- signedXml.KeyInfo = keyInfo;
- // Computa la firma.
- signedXml.ComputeSignature();
- // Obtiene la representación XML de la firma y la salva
- // en un objeto XmlElement .
- XmlElement xmlDigitalSignature = signedXml.GetXml();
- xmlDigitalSignature.Prefix = "ds";
- signedXml.ComputeSignature();
- System.Console.WriteLine(signedXml.GetXml().InnerXml);
- // Agrega el elemento al documento XML .
- xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
- //check signature
- XmlNodeList nodeList = xmlDoc.GetElementsByTagName("ds:Signature");
- if (nodeList.Count <= 0)
- {
- MessageBox.Show("Verification failed: No Signature was found in the document.");
- }
- else if (nodeList.Count >= 2)
- {
- MessageBox.Show("Verification failed: More that one signature was found for the document.");
- }
- else
- {
- signedXml.LoadXml((XmlElement)nodeList[0]);
- if (signedXml.CheckSignature())
- {
- MessageBox.Show("signature ok");
- }
- else
- {
- MessageBox.Show("signature failed");
- }
- }
- } // Fin SignXml
- <CFE:EnvioCFE version="1.0" xmlns:CFE="http://cfe.dgi.gub.uy">
- <CFE:Caratula version="1.0"
- .....
- </CFE:Caratula>
- <CFE xmlns:xd="http://www.w3.org/2000/09/xmldsig#" version="1.0" xmlns="http://cfe.dgi.gub.uy">
- <eTck>
- .............
- </eTck>
- <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
- ........
- <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
- <DigestValue>eFoM+HEMPH+Ya+D1ljOm1yxEqsg=</DigestValue>
- </ds:Signature>
- </CFE>
- </CFE:EnvioCFE>
Add Comment
Please, Sign In to add comment