Ejemplo n.º 1
0
        public ArrayList GetSignatureReferences(int signatureNumber)
        {
            SignatureReference signatureReference = (SignatureReference)this._signatureReferenceList[signatureNumber];

            return(signatureReference.references);
        }
Ejemplo n.º 2
0
        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);
        }