Bonjour,
Je veux générer et vérifier une signature XML. Normalement c'est faisable à l'aide de la classe SignedXml.
Mais lorsque j'essais de signer l'element identifié par l'URI suivant URI="#xpointer(//*[@authenticate='true'])", j'obtiens une exception "Malformed Reference Element" levée par la fonction signedXml.ComputeSignature() pourtant lorsque je mets URI="#1" (avec 1 est l'ID de l'élément dans le fichier xml) la signature marche bien!
Ci après mon code :
public void SignXml (string FileName, RSA Key)
{
// Create a new XML document.
XmlDocument doc = new XmlDocument();
// Load the passed XML file using its name.
doc.Load(new XmlTextReader(FileName));
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(doc);
// Add the key to the SignedXml document.
signedXml.SigningKey = Key;
// Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "#xpointer(//*[@authenticate='true'])";
XmlDsigC14NTransform trans = new XmlDsigC14NTransform();
reference.AddTransform(trans);
signedXml.AddReference(reference);
// Compute the signature.
signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
if (doc.FirstChild is XmlDeclaration)
{
doc.RemoveChild(doc.FirstChild);
}
}
Merci d'avance de vos réponses.