public ArrayList GetSignatureReferences(int signatureNumber) { SignatureReference signatureReference = (SignatureReference)this._signatureReferenceList[signatureNumber]; return(signatureReference.references); }
public bool ValidateReferences(SignedXml signedXml) { byte[] digest; ArrayList references = signedXml.SignedInfo.References; int singatureReferenceCounter = 1; foreach (Reference reference in references) { string uri = reference.Uri; string hashAlgorithm = reference.DigestMethod; if (!uri.Equals("")) { this._referenceList.Clear(); SignatureReference sigReference = new SignatureReference(); sigReference.nr = singatureReferenceCounter; singatureReferenceCounter++; sigReference.references = new ArrayList(); ArrayList newList = new ArrayList(); newList = this.FindXmlElementByURI(uri, this._inputDocument.ChildNodes[0].NextSibling); XmlElement referenceElement = (XmlElement)newList[0]; XmlElement clonedReferenceElement = (XmlElement)referenceElement.Clone(); newList = (ArrayList)this._referenceList.Clone(); sigReference.references.Add(clonedReferenceElement); this._signatureReferenceList.Add(sigReference); } if (uri.Equals("")) { XmlNode node = null; SignatureReference sigReference = new SignatureReference(); sigReference.nr = singatureReferenceCounter; singatureReferenceCounter++; ArrayList list = new ArrayList(); XmlDocument doc = new XmlDocument(); Transform trans = reference.TransformChain[0]; XmlDsigXPathTransform xpathTransform = (XmlDsigXPathTransform)trans; XmlElement xpathElement = xpathTransform.GetXml(); string xpath = xpathElement.InnerText; XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(this._inputDocument.NameTable); XmlElement bodyElement = (XmlElement)this._inputDocument.GetElementsByTagName("s:Body")[0]; xmlNamespaceManager.AddNamespace("s", bodyElement.NamespaceURI); xmlNamespaceManager.AddNamespace("tns", "http://tempuri.org/"); xmlNamespaceManager.AddNamespace("xenc", "http://www.w3.org/2001/04/xmlenc#"); xmlNamespaceManager.AddNamespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis -200401-wss-wssecurity-secext-1.0.xsd"); node = this._inputDocument.SelectSingleNode(xpath, xmlNamespaceManager); list.Add((XmlElement)node.Clone()); sigReference.references = list; this._signatureReferenceList.Add(sigReference); } XmlElement referenceTransformed = this.ApplyTransform(reference); digest = this.DigestElement(referenceTransformed, hashAlgorithm, ""); string digestValue = Convert.ToBase64String(digest); this._tracer.appendReferenceValidation(uri, digestValue); string convertedDigest = Convert.ToBase64String(reference.DigestValue); if (convertedDigest.Equals(digestValue)) { return(true); } else { return(false); } } return(false); }